输入一个列表,输出列表中任意三个数相加为零的集合
res = []
nums = sorted(nums)
for i in range(0, len(nums) - 1):
if i > 0 and nums[i] == nums[i - 1]:
continue
j = i + 1
k = len(nums) - 1
target = -nums[i]
while j < k:
if nums[j] + nums[k] > target:
k -= 1
elif nums[j] + nums[k] < target:
j += 1
else:
res.append([nums[i], nums[j], nums[k]])
# 把判断加到添加列表后,如果下一个值与上一个值相同,那么直接跳过,就减少了好多if判断
while j < k - 1 and nums[j] == nums[j + 1]:
j += 1
while k > j + 1 and nums[k] == nums[k - 1]:
k -= 1
j += 1
k -= 1
return res
==菜鸡新手,改了两个小时,重点在加注释的地方,还有使用while,解决了列表排序后的2,2,2,2,2连续值相等的问题。据说这个是最简单的,时间复杂度O(nlgn)