三数之和
https://leetcode.cn/problems/3sum/ (opens new window) 中等 需要注意的点
nums.sort()
排序if i > 0 and nums[i] == nums[i-1]:
这句判断- 跳过left right
class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
if not nums or len(nums) < 3:
return []
size = len(nums)
# 1
nums.sort()
res = []
for i in range(size):
if i > 0 and nums[i] == nums[i-1]:
continue
left = i+1
right = size-1
while left < right:
sum = nums[i] + nums[left]+nums[right]
if sum == 0:
res.append([nums[i], nums[left], nums[right]])
# 3
while left < right and nums[left] == nums[left+1]:
left += 1
left += 1
while left < right and nums[right] == nums[right-1]:
right -= 1
right -= 1
elif sum >0:
right -= 1
else:
left += 1
return res