python算法之两个数的和

在确保存在唯一解的情况下,从给定数字中寻找两个数使其和为目标值。本文介绍了两种方法:1) 排序后使用双指针搜索;2) 利用哈希表实现常数级别查询速度的解法。详细源代码和运行结果展示。
摘要由CSDN通过智能技术生成

两个数的和

在给定的一些数字中找出两个数,使得他们的和为N,前提是数据中保证有答案,并且只有一个答案。例如给定5个数字:3,4,5,7,10,从中选择两个数使他们的和为11,可以选择4和7,如何解决这个问题?

第一种求和方法

先将数组从小到大排序,排序时需要把数据复制到一个新的数组中,然后对新的数组进行排序。

数组排序后,可以开始查找了。建立两个指针left和right,分别指向新数组的第一个元素和最后一个元素。如果俩个指针的两个数据相加的和等于目标值,那么查找结束,返回这两个数的下标,如果他们的和小于目标值,则说明left指向的数据太小了,需要让left指针向右移动一位;如果他们的和大于目标值,则说明right指向的数据太大了,需要让right指针向左移动一位。重复这个过程,直到找到答案。

源代码:

#方法1
def twoSum(nums, target):
    res = []  #存放结果编号数据
    newnums = nums[:]  #深拷贝,把源数据复制到newnums里
    newnums.sort()   #对新数组排序
    left = 0
    right = len(newnums) - 1#定义left和right指针分别指向新数组的开头和结尾
    while left < right:
        if newnums[left] 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黎明之道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值