三数之和
先排序
固定一个数nums[i]
然后就类似上一题两数之和去找两个数使得 nums[left] + nums[right] == -nums[i]
遍历所有排序后的nums中的元素充当固定数
一下是几个需要判别的点:
如果nums[i] > 0便终止程序
如果nums[i] = nums[i-1]则继续往后遍历(保证不重复)
同时在left,right那里
如果nums[left] == nums[left + 1],那么直接left + 1,继续往后走
如果nums[right] == nums[right -1],直接right - 1,继续往后走
def threeSum(nums: list[int]) -> list[list[int]]:
length = len(nums)
nums.sort()
res = []
for i in range(length):
if nums[i] > 0:
return res
if i > 0 and nums[i] == nums[i - 1]:
continue
left = i + 1
right = length - 1
while left < right:
Sum = nums[left] + nums[right]
if Sum > -nums[i]:
right -= 1
elif Sum < -nums[i]:
left += 1
else:
res.append([nums[left],nums[right],nums[i]])
while left < right and nums[left] == nums[left + 1]:
left += 1
while left < right and nums[right] == nums[right - 1]:
right -= 1
left += 1
right -= 1
return res