3 SUM

双指针只需要两处注意,

(1) check nums[i] 的等值不要重复计算

(2) nums[j] nums[k] 的等值在找到pair的时候不要重复计算。

class Solution:
    def threeSum(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res =[]
        n = len(nums)
        for i in range(n-2):
            if i == 0 or nums[i] != nums[i-1]:
                j = i+1
                k = n-1
                target = -nums[i]
                while j < k:
                    curr = nums[j] + nums[k]
                    if curr < target:
                        j+=1
                    elif curr > target:
                        k-=1
                    else:
                        res.append([nums[i],nums[j],nums[k]])
                        while j < n-1 and nums[j]== nums[j+1]:
                            j+=1
                        while k > 0 and nums[k] == nums[k-1]:
                            k-=1
                        j+=1
                        k-=1
        return res
                

Last updated

Was this helpful?