|  | 
 
| 
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  例子:给定数组 nums = [-1, 0, 1, 2, -1, -4],
 
 满足要求的三元组集合为:
 [
 [-1, 0, 1],
 [-1, -1, 2]
 ]
 
 来源:力扣(LeetCode)
 链接:https://leetcode-cn.com/problems/3sum
 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
 
 复制代码class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums = sorted(nums)
        if len(nums) < 3 or nums[0] > 0 or nums[-1] < 0:
            return []
        
        result = []
        i = 0
        while nums[i] <= 0 and i < len(nums)-1:
            if i > 0 and nums[i] == nums[i-1]:
                i += 1
                continue
            j = i+1
            k = len(nums)-1
            while j<k:    
                if nums[j]+nums[i]+nums[k] > 0:
                    k -= 1
                    # while k > j and nums[k] == nums[k+1]:
                    #     k -= 1
                elif nums[j]+nums[i]+nums[k] < 0:
                    j += 1
                    # while j < k and nums[j]==nums[j-1]:
                    #     j += 1
                else:
                    result.extend([[nums[i],nums[j],nums[k]]])
                    j += 1
                    k -= 1
                    while j<k and nums[k] == nums[k+1]: k-=1
                    while j<k and nums[j] == nums[j-1]: j+=1
            i += 1
        return result
为什么注释的几行去掉后 效率提高了很多呢?
 思路是固定最左边 然后右边双指针寻找 跳过重复项
 | 
 |