题目:两数之和
给定一个整数数组 nums
和一个目标值 target
,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
1 | 给定 nums = [2, 7, 11, 15], target = 9 |
思路
由于题目说明了只有一个对应答案,那么简单粗暴的想法就是进行两次遍历:
- 先从头取第一个数
- 将该数依次与后面的每个数相加判断是否等于target
实现:
1 | class Solution: |
优化方法
上面的方法做了两次遍历,那么有没有办法做一次呢
参考了其他网友的答案,果真还是有办法的,先上代码:
1 | class Solution: |
这里主要用到了dict()
,思路是:
先新建一个空
dict()
用于存放列表中的数和对应的索引先将使用
enumerate()
函数将列表转组合为一个索引序列,同时列出数据和下标:1
2
3
4
5list(enumerate(nums))
[(0, 4), (1, 3), (2, 2), (3, 1)]
nums = [2, 7, 11, 15]
list(enumerate(nums))
[(0, 2), (1, 7), (2, 11), (3, 15)]然后用目标减去当前的值就获取我们需要找的另一个值
判断另一个值是否存在于
dict
中,在的话,直接返回两个数值的索引即可,否则将这个数也加入到dict
中。
如果大家有更好的方法,欢迎一起探讨。