Find the three elements that sum to zero from a set of n real numbers
输入:[-25, -10, -7, -3,-4,-6, 2, 4, 8, 10]
输出:[[-10, 2, 8], [-7, -3, 10], [-6, -4, 10], [-6, 2, 4]]
简单思路
- 三项之和为0,必须至多有2个为正数,剩余为负数。
- 先对列表进行排序,避免代码中不必要的计算。
- 为了优化算法,循环中筛掉重复元素
代码如下
def three_sum(*arrys):
nums, result, i = sorted(arrys),[],0
# 将三个元素分别赋值,顺带排序(具体原理很深奥,但使用起来非常简洁)
while i < len(nums) -2:
# i遍历所有元素(除了最后两个以外),从list中index为0开始
j,k = i+1, len(nums)-1
# j从list中index为1的元素开始遍历,k为尾部开始。两个指针j和k分别向中间靠拢
while j<k:
if nums[i] + nums[j] + nums[k] < 0: #j从左至右遍历
j += 1
elif nums