我是靠谱客的博主 负责苗条,最近开发中收集的这篇文章主要介绍15.三数之和,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

15.
参考官方解析,解释了排序+双指针的解法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码参考排序 + 双指针,逐行解释
代码:

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nlen = len(nums)
        res = []
        if nlen < 3:
            return res
        
        nums.sort()

        for pivot in range(nlen): # 固定第一个值, 向后遍历

            if nums[pivot] > 0:  # 如果最小的数都大于0,那么后面找出的三数和不可能为0(已排序)
                return res
            if pivot > 0 and nums[pivot] == nums[pivot - 1]: # 跳过重复的数值
                continue

            L = pivot + 1 # 双指针的左边界 第二个值成递增趋势
            R = nlen - 1 # 双指针的右边界 第三个值成递减趋势
            
            while L < R :
                if nums[pivot] + nums[L] + nums[R] == 0:
                    res.append([nums[pivot], nums[L], nums[R]])
                    L += 1
                    R -= 1

                    while L < R and nums[L] == nums[L - 1]: # 跳过重复数值
                        L += 1
                    while L < R and nums[R] == nums[R + 1]:
                        R -= 1
                elif nums[pivot] + nums[L] + nums[R] > 0: # 第三个值大了些
                    R -= 1
                else: # 第二个值小了些
                    L += 1
                    
        return res

最后

以上就是负责苗条为你收集整理的15.三数之和的全部内容,希望文章能够帮你解决15.三数之和所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部