闲的蛋疼,每天刷刷。可是发现自己第一题都不会啊,所以记录下来,方便自己复习。
题目
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
给定一个整型的数组,和一个target。返回两个加起来的和为target的数字下标。
你可以假定每个输入,都会恰好有一个满足条件的返回结果。并且每个元素只能使用一次。
例子
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
解法
class Solution(object):
def twoSum(self, nums, target):
if len(nums) <= 1:
return False
buff_dict = {}
for i in range(len(nums)):
print(buff_dict)
if nums[i] in buff_dict:
return [buff_dict[nums[i]], i]
else:
buff_dict[target - nums[i]] = i
a=Solution()
print(a.twoSum(nums = [2, 7, 11, 15], target = 18))
解释
感觉解题的思想好奇妙。上面代码的运行结果如下所示:
{}
{16: 0}
{16: 0, 11: 1}
[1, 2]
建立一个buff_dict,这个dict的key为元素与target的差值,value为元素在nums列表中的下标。这样就保证了每个key-vaule对应的值之和为target。这样只要遍历nums列表,找到元素值等于dict中的key的值那个元素就好了。
所以通过 nums[i] in buff_dict 判断下,然后 return [buff_dict[nums[i]], i] 就ok了。