我是靠谱客的博主 故意裙子,最近开发中收集的这篇文章主要介绍很有趣的Python算法面试题——找出3个数字相加等于0的列表简单思路代码如下计算算法运行时间(引入datetime模块),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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[i] + nums[j] + nums[k] > 0: #k从右至左遍历
                k -= 1
            else:
                result.append([nums[i],nums[j],nums[k]]) 
# 把三项之和为0的数列插入result列表尾部(但是需要优化算法,去掉重复元素)
                j, k = j + 1, k - 1  
                while j < k and nums[j] == nums[j - 1]:  
# j和k同时变化,如果不一起变化的话,容易多一次无用的比较
                    j += 1
                while j < k and nums[k] == nums[k + 1]:
                    k -= 1
        i += 1
    return result
------------------
#示例如下
three_sum(-25, -10, -7, -3,-4,-6, 2, 4, 8, 10) 
[[-10, 2, 8], [-7, -3, 10], [-6, -4, 10], [-6, 2, 4]]

计算算法运行时间(引入datetime模块)

import datetime #引用时间模块
starttime = datetime.datetime.now() #记录初始时间


def three_sum(*arrys):
    nums, result, i = sorted(arrys),[],0
    
    while i < len(nums) -2:
        j,k = i+1, len(nums)-1
        
        while j<k:
            if nums[i] + nums[j] + nums[k] < 0:
                j += 1
            elif nums[i] + nums[j] + nums[k] > 0:
                k -= 1
            else:
                result.append([nums[i],nums[j],nums[k]])
                j, k = j + 1, k - 1
                while j < k and nums[j] == nums[j - 1]:
                    j += 1
                while j < k and nums[k] == nums[k + 1]:
                    k -= 1
        i += 1
    return result
three_sum(-25, -10, -7, -3,-4,-6, 2, 4, 8, 10)

endtime = datetime.datetime.now() 
# 记录结束时间
print((endtime - starttime)) 
# 算法运行时间为0:00:00.000388
0:00:00.000388 #运行时间

如下为此题(使用类class)编写的代码及其英文解释
代码及其英文解释

爱学习的人最美

最后

以上就是故意裙子为你收集整理的很有趣的Python算法面试题——找出3个数字相加等于0的列表简单思路代码如下计算算法运行时间(引入datetime模块)的全部内容,希望文章能够帮你解决很有趣的Python算法面试题——找出3个数字相加等于0的列表简单思路代码如下计算算法运行时间(引入datetime模块)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部