M-18. 4Sum

# O(n^3), 3SUM外面套了一层循环, 添加了一些限制条件, 自己慢慢品味吧...
class Solution:
    def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
        res = []
        nums.sort()
        for j in range(len(nums)-3):
            if j > 0 and nums[j] == nums[j-1]:
                    continue
            for i in range(j + 1, len(nums)-2):
                if i > j+1 and nums[i] == nums[i-1]:
                    continue
                l, r = i+1, len(nums)-1
                while l < r:
                    s = nums[i] + nums[l] + nums[r] + nums[j]
                    if s < target:
                        l += 1 
                    elif s > target:
                        r -= 1
                    else:
                        res.append([nums[i], nums[l], nums[r], nums[j]])
                        while l < r and nums[l] == nums[l+1]:
                            l += 1
                        while l < r and nums[r] == nums[r-1]:
                            r -= 1
                        l += 1; r -= 1
        return res

Last updated

Was this helpful?