很有趣的Python算法面试题——找出3个数字相加等于0的列表

博客介绍了如何从给定的数字列表中找出三个元素的组合,使得它们的和为零。提供了简单的思路和优化算法,包括先对列表排序和去除重复元素,以及计算算法运行时间的方法。
摘要由CSDN通过智能技术生成

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]]


简单思路

  1. 三项之和为0,必须至多有2个为正数,剩余为负数。
  2. 先对列表进行排序,避免代码中不必要的计算。
  3. 为了优化算法,循环中筛掉重复元素

代码如下


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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值