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
---恢复内容结束---