Leetcode 里的 easy题
原题:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
分析:
题意就是给定一个sum,一个数组,然后你需要输出数组中两个相加之后的和等于这个sum的数字的下标
思路:
1当然可以来个二重遍历,把所有数字的两两之和都算出来,然后看看那一次求和的时候,那个和等于sum,然后输出当前的i和j。(这就是肤浅的我的思路,但是貌似不允许这样做)
2根据网上搜到的办法,可以建立一个字典,在遍历的时候,先判断自己需要的数字是否在字典里,如果不在的话,就把自己放入字典内,供后者查询。
比如现在给定的数组为[5,6,2,7],sum为9
那么程序执行的顺序就是:
keys={}
5需要的数字4在key里么?——》不在!
将5放入keys中
Key={5}
下一个
6需要的数字3在keys里么?——》不在!
将6放入keys中
Keys={5,6}
2需要的数字7在keys里么?——》不在!
将2放入keys中
Keys={5,6,2}
7需要的数字2在keys里么?——》在!
输出对应的下标!
这样一来,只要循环一次,就一定能找到那两个数字!
代码:
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
keys = {}
for i in xrange(len(nums)):
if target - nums[i] in keys:
return [keys[target - nums[i]], i]
if nums[i] not in keys:
keys[nums[i]] = i
参考:Two Sum
欢迎关注“pyhon修炼之道”,我们将持续更新新鲜python文章~