leetcode刷题:两数之和

leetcode刷题:两数之和

题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
开始思路:
只是做出来,但是没有考虑只对应一个答案,两个for循环不容易解决重复问题,
 1 a = [2,4,6,3]
 2 b = 9
 3 def twoSum(nums, target):
 4     lens = len(nums)
 5     for i in range(lens):
 6         for j in range(i+1,lens):
 7             if nums[i]+nums[j] == target:
 8                print(i, j)
 9                break
10         break

这样在列表的第一个第二个值重复时候会出错

改正思路:只循环一个j,和值减去当前循环值去寻找差值,得到唯一性:

 1 a = [2,4,6,3]
 2 b = 9
 3 def twoSum(nums, target):
 4     lens = len(nums)
 5     for i in range(1, len(nums)):
 6         temp = nums[:i]
 7         if (target - nums[i]) in temp:
 8             j = temp.index(target - nums[i])
 9             print(j, i)
10 
11 
12 twoSum(a, b)

需要学习注意的是:

range 的范围是从0到i-1

列表的下标范围是从0开始对应元素

a[:1]表示a[0],列表的第一个元素

进一步学习:

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
enumerate(sequence, [start=0])
  • sequence — 一个序列、迭代器或其他支持迭代对象。
  • start — 下标起始位置。
 1 def two_sum(nums, target):
 2     """这样写更直观,遍历列表同时查字典"""
 3     dct = {}
 4     for i, n in enumerate(nums):
 5         #nums自动识别为字典,nums中下标为键,值为列表对应值
 6         cp = target - n
 7         #寻找和减去第一个的数的差值
 8         if cp in dct:
 9             print([dct[cp], i])
10         else:
11             dct[n] = i
12             #返回的一种写法
13 
14 
15 two_sum(a, b)

引申算法:哈希算法

 1 用字典模拟哈希求解
 2 字典记录num1和num2的值和位置
 3 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
 4 def twoSum(nums, target):
 5     hashmap={}
 6     #存储的内容是键值对(key-value)映射
 7     for ind,num in enumerate(nums):
 8         hashmap[num] = ind
 9     for i,num in enumerate(nums):
10         j = hashmap.get(target - num)
11         if j is not None and i!=j:
12             return [i,j]
最后两个引用出处
作者:lao-la-rou-yue-jiao-yue-xiang
链接:https://leetcode-cn.com/problems/two-sum/solution/xiao-bai-pythonji-chong-jie-fa-by-lao-la-rou-yue-j/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • bat命令详解_bat结束进程命令

    bat命令详解_bat结束进程命令批处理文件中可引用的参数为%0~%9,%0是指批处理文件的本身,也可以说是一个外部命令;%1~%9是批处理参数,也称形参;而替换形参的实参若超过了批处理文件中所规定数值(9个)且想在批处理文件中应用这些实参的话,shift命令可以帮你实现! Shift命令:更改批处理文件中可替换参数的位置 C代码    shift[/n]   n的取值是[0,8],且为整数;[/n]为可选参数,当赋予n

    2022年9月14日
    0
  • js – form表单提交不刷新

    大家已经发现了,当我们点击submit提交form表单的时候,他会刷新一次,如果不想它刷新的话有下面两种方法:利用iframe我们可以利用一个隐藏的iframe来实现,主要是我们把提交目标放到一个隐藏的iframe里,然后让iframe提交数据(ps:这个未实测,仅仅是网上提供的,我记录一下.以后遇到或者会试一下吧)<formaction=”…

    2022年4月18日
    52
  • 函数模板与同名的非模板函数不可以重载(重载的定义)

    关于函数的重载机制,是一个比较复杂的问题,其中涉及到了优先级定义和最佳匹配等问题,如果要阐述清楚,恐怕不是一两篇文章就能说的明白。但是如果掌握了一些常用的“规律”,对于了解程序对重载函数是如何进行选择也有很大的好处,本文尝试将自己理解的知识,结合下面简单的例子简略的说说函数重载机制,文章的摘录部分列出了一些关于程序如何选择重载函数的规则。:)例子如下:#include

    2022年4月15日
    100
  • 我在武汉新东方上过的8个老师是谁_武汉新东方学校靠谱吗

    我在武汉新东方上过的8个老师是谁_武汉新东方学校靠谱吗上新东方的总结、感想。对新东方还是有一点留恋的。。。

    2022年9月13日
    0
  • 剑指Offer面试题:11.调整数组顺序使奇数位于偶数前面建议收藏

    一题目:调整数组顺序使奇数位于偶数前面二解题思路如果不考虑时间复杂度,最简单的思路应该是从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位。挪完之后在

    2021年12月19日
    38
  • ItemDataBound的用法

    ItemDataBound的用法原理:在生成datalist列时ItemDataBound触发,也就是说每生成一列就触发一次。这个事件的触发要早于itemcommand.  datalist里面嵌套datalist:内层控件数据绑定与事件声明在外层的ItemDataBind中实现private void dlFileType_ItemDataBound(object sender, System.Web.UI….

    2022年10月13日
    0

发表回复

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

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