15. 三数之和
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
示例:
输入:
nums = [-1, 0, 1, 2, -1, -4]
输出:
[
[-1, 0, 1],
[-1, -1, 2]
]
解答:
def threeSum(self, nums):
sortednums = sorted(nums)
if len(nums) < 3 : return []
if sortednums[0] > 0 or sortednums[-1]< 0 : return []
if sortednums[0] == sortednums[-1] == 0 : return [[0,0,0]]
res = []
i=0
while i < len(sortednums)-2:
j,k = i+1,len(sortednums)-1
while j < k:
sum = sortednums[j] + sortednums[k]
if sum > -sortednums[i]:
k-=1
elif sum < -sortednums[i]:
j+=1
else:
res.append([sortednums[i], sortednums[j], sortednums[k]])
tempj = sortednums[j]
while j < k and sortednums[j] == tempj: #j避免重复
j+=1
tempk = sortednums[k]
while j < k and sortednums[k] == tempk: #k避免重复
k-=1
tempi = sortednums[i]
while i < len(sortednums)-2 and sortednums[i] == tempi : #i避免重复
i += 1
return res