Python求解两数之和[通俗易懂]

Python求解两数之和[通俗易懂]题目描述:写一个函数,此函数要实现以下功能:给一个列表,并且给一个目标数字,如果列表里的两个数字之和等于目标数字,返回那两个数字的索引值。比如,给定列表[3,5,7,14],目标数字是10,那么返回[0,2],0是3的索引,2是7的索引,3+7=10.注意,不可以重复利用列表中的某个数字,比如返回[1,1]是不能接受的。一、两层for循环遍历列表思路:先拿出列表里的第0个数…

大家好,又见面了,我是你们的朋友全栈君。

题目描述:

写一个函数,此函数要实现以下功能:

给一个列表,并且给一个目标数字,如果列表里的两个数字之和等于目标数字,返回那两个数字的索引值。

比如,给定列表[3,5,7,14],目标数字是10,那么返回[0,2],0是3的索引,2是7的索引,3+7=10.

注意,不可以重复利用列表中的某个数字,比如返回[1,1]是不能接受的。

一、两层for循环遍历列表

思路:先拿出列表里的第0个数字,依次尝试和第1个、第2个……第n个相加,看能否等于目标数字,如果有某个组合等于目标数字,就返回这个组合的两个索引值,如果都不行,再拿出第1个数字,依次尝试和第2个、第3个……第n个相加,看能否等于目标数字……每个数字都不需要回过头和前面的数字相加,因为之前已经尝试过了。

这种方法的思路非常简单,但是算法的时间复杂读比较高,为O(n2),当给定的列表很长的时候,耗时非常长。

#nums参数需要一个列表,target参数就是我们想实现的和的值
def twoIndices(nums,target):
    '''这是寻找和为目标值的两个数的索引的函数'''
    for i in range(len(nums)):
        #我们不需要回过头相加,所以j是从i的下一个数字开始,到列表的末尾
        for j in range(i+1,len(nums)):
            if nums[i]+nums[j]==target:
                return [i,j]
    else:
        return "No such two numbers."

#这是我们用来检测上述函数是否好用的一个例子
print(twoIndices([3,6,3,5],6))

二、用字典来实现

思路:

先建立一个用于存放数字和索引的空字典。

我们从列表中取出一个数字,然后看字典里是否存在能跟这个数字相加得到目标数字的数字。如果存在,就返回两个数字的索引,不存在,就把取出来的这个数字作为键,它的索引作为值存进字典,并取出下一个数字,重复刚才的操作,直到找到合适的两个数字或者全部数字都看过一遍为止。

这样算法的时间复杂度是O(n),比第一种方法好多了。

#nums参数需要一个列表,target参数就是我们想实现的和的值
def twoIndices(nums,target):
    '''这是寻找和为目标值的两个数的索引的函数'''
    #定义一个用于存放数字和索引的字典
    mydict={}
    #遍历列表里的数字,得到索引和数字
    for index,right_num in enumerate(nums):
        #用目标数字减去我们当前从列表中取出的数字,得到我们需要的数字
        left_num=target-right_num
        #如果字典里已经存放了我们需要的数字
        if mydict.get(left_num) != None:
            #返回我们需要的数字的索引和当前数字的索引,终止循环
            return [mydict[left_num],index]
        #如果字典里还不存在我们需要的数字,则把当前的数字和它的索引存入字典
        mydict[right_num]=index 
    else:
        return 'No such two numbers.'

#用这个列表测试我们的函数好不好用
print(twoIndices([3,5,3,8],6))

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137833.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月5日 下午8:00
下一篇 2022年5月5日 下午8:20


相关推荐

  • 手机窃听讲话推送广告_智能手机窃听原理

    手机窃听讲话推送广告_智能手机窃听原理近日有媒体报道称,“窃听风云再次上演,一条短信实现窃听”,文中“记者卧底、售价2000元、可跟踪用户GPS位置”等等字眼处处可见。所谓的“X卧底”真有这么神奇?瑞星安全专家表示,所谓X卧底不过是“手机木马加录音软件”混合体,并没有新闻中所说的那么神奇。安全专家表示,所谓的“X卧底”本质上是一款手机木马,通常不会主动传播,而是由使用者的亲密接触者(妻子、丈夫等)手工安装,安装之后没有任何主界

    2025年12月6日
    5
  • 斗胆聊聊小马哥在AI入口上押了什么?

    斗胆聊聊小马哥在AI入口上押了什么?

    2026年3月12日
    1
  • 初学TypeScript之接口定义

    初学TypeScript之接口定义TypeScript入门(2)前面讲了如何使用TypeScript和TypeScript的数据类型有哪些,这一章就讲解TypeScript的接口。如果不知道如何写TypeScript的朋友或者不知道TypeScript的数据类型有哪些的朋友可以转至TypeScript的使用以及数据类型详解处观看。接口:简介:TypeScript的核心原则是对值所具有的结构进行类型检查。在TypeSc…

    2022年5月1日
    73
  • 无标度网络 matlab,无标度网络及MATLAB建模

    无标度网络 matlab,无标度网络及MATLAB建模无标度网络 1 简介传统的随机网络 如 ER 模型 尽管连接是随机设置的 但大部分节点的连接数目会大致相同 即节点的分布方式遵循钟形的泊松分布 有一个特征性的 平均数 连接数目比平均数高许多或低许多的节点都极少 随着连接数的增大 其概率呈指数式迅速递减 故随机网络亦称指数网络 现实世界的网络大部分都不是随机网络 少数的节点往往拥有大量的连接 而大部分节点却很少 一般而言他们符合 zipf 定律 也就是

    2026年3月19日
    2
  • MySQL8.0.19 JDBC下载与使用「建议收藏」

    MySQL8.0.19 JDBC下载与使用「建议收藏」MySQLJDBC下载链接MySQLCommunityDownloadsJAVA在IDEA中使用在Eclipse中使用

    2025年5月29日
    4
  • 玩转安卓 Android系统文件夹结构解析(绝对有用)[通俗易懂]

    玩转安卓 Android系统文件夹结构解析(绝对有用)[通俗易懂]//system//app这个里面主要存放的是常规下载的应用程序,可以看到都是以APK格式结尾的文件。在这个文件夹下的程序为系统默认的组件,自己安装的软件将不会出现在这里,而是//data//文件夹中。下面是详细的介绍://system//app//AlarmClock.apk闹钟//system//app//AlarmClock.odex//system//app//Brows

    2022年8月31日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号