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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java Web项目 慧心人力资源管理系统[通俗易懂]

    Java Web项目 慧心人力资源管理系统[通俗易懂]美和易思JavaWeb机试试题题目:慧心人力资源管理系统文档下载:https://download.csdn.net/download/weixin_44893902/16336711实现代码下载:目录一、语言和环境二、实现功能三、数据库设计四、具体要求及推荐实现步骤五、评分标准六、实现代码一、语言和环境实现语言:JAVA语言。 环境要求:MyEclipse/Eclipse+Tomcat+MySql。 使用技术:Jsp+Servlet+Jav..

  • 能否利用Hadoop搭建完整的云计算平台「建议收藏」

    Hadoop并不完全代表云计算,所以,要用Hadoop搭建完整的云计算平台,答案是不够。我们常说云计算,实际上还是通过计算机的大规模或者说海量处理来为生活中各式各样的人和各行各业服务——所以,核心在“服务”。关于服务,展开来就是常用的那3种(也是事实上的标准):SaaS,PaaS,IaaS。对云计算来说,公有和私有,虚拟和存储,这其实是相对讨论的核心。回头说Hadoop。在Google三大…

  • xshell ping不通虚拟机_虚拟机为什么ping不通主机

    xshell ping不通虚拟机_虚拟机为什么ping不通主机有朋友联系说:“虚拟机可以ping本机,本机也可以ping虚拟机,但是Xshell连接不上虚拟机。”,找了不少资料发现好像不是这个问题的解决方法,所以在这里介绍下怎么解决这个问题。同时,总结几种xshell连接不上虚拟机的解决方法。

  • pycharm界面颜色设置_Excel护眼色打印

    pycharm界面颜色设置_Excel护眼色打印首先打开菜单file下的setting设置:然后找到editor中的general3.然后点击图标最上面的saveas创建第二个默认设置:4.接下来再下面的对话框中找到defaulttext并将background和foreground对话框打勾:5.对background进行颜色设定:6.对foreground进行设计:7.最后点击最下面的apply和ok即…

  • 校园兼职平台青团社获数亿元B+轮融资,蚂蚁⾦服领投

    校园兼职平台青团社获数亿元B+轮融资,蚂蚁⾦服领投

  • 设计模式(五)适配器模式Adapter(结构型)

    设计模式(五)适配器模式Adapter(结构型)设计模式(五)适配器模式Adapter(结构型)1.概述:接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器。………

发表回复

您的电子邮箱地址不会被公开。

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