1、两数之和
1、问题描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
2、示例
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dic = {}
for index, value in enumerate(nums):
other_number = target - value
if other_number in dic:
return [dic[other_number], index]
dic[value] = index
return []
print(Solution().twoSum([2, 7], 9))
结果:
分析:
初始化一个空字典dic。
遍历数组nums,对于第一个数字2,计算其与目标值target的差other_number,即7。
字典dic中不存在键为7的项,将2作为键,下标0作为值,插入到字典dic中。
遍历数组nums,对于第二个数字7,计算其与目标值target的差other_number,即2。
字典dic中存在键为2的项,返回该数字的下标0和当前数字的下标1,即[0, 1]。
整个过程实际上就是在遍历数组,不断地将数字和其下标插入到字典中,并判断当前数字所对应的差值是否已经出现在字典中。如果出现过,则说明数组中存在两个数字的和等于目标值,返回这两个数字的下标即可。