leetcode-18-四数之和

---恢复内容开始---

题目描述:

 方法一:

class Solution:
    def fourSum(self, nums: List[int], target: int) -> List[List[int]]:
        n = len(nums)
        if n<4:
            return []
        nums.sort()
        res = []
        for i in range(n-3):
            if i>0 and nums[i]==nums[i-1]:continue
            if nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target:break
            if nums[i]+nums[n-3]+nums[n-1]+nums[n-2]<target:continue
            for j in range(i+1,n-2):
                if j>i+1 and nums[j]==nums[j-1]:continue
                if nums[i]+nums[j+1]+nums[j+2]+nums[j]>target:break
                if nums[i]+nums[n-2]+nums[n-1]+nums[j]<target:continue
                left,right = j+1,n-1
                while left<right:
                    tmp = nums[i] + nums[j] + nums[left] + nums[right]
                    if tmp == target: 
                        res.append([nums[i],nums[j],nums[left],nums[right]]) 
                        while left < right and nums[left] == nums[left+1]: left += 1 #不能是if
                        while left < right and nums[right] == nums[right-1]: right -= 1 
                        left += 1 
                        right -= 1 
                    elif tmp > target: right -= 1 
                    else: left += 1

        return res

 

---恢复内容结束---

posted @ 2019-07-09 17:57  oldby  阅读(231)  评论(0编辑  收藏  举报