题目
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]
解
#
# @lc app=leetcode.cn id=1 lang=python3
#
# [1] 两数之和
#
# @lc code=start
class Solution:
def twoSum(self, nums, target):
map = {}
for i in range(len(nums)):
if nums[i] not in map:
map[target - nums[i]] = i
else:
return map[nums[i]], i
return -1, -1
nums = [2, 11, 15, 7]
target = 9
Solution().twoSum(nums, target)
# @lc code=end
Note
- 获取列表的长度;
- 列表中的挨个值判断是否在map中存在对应的键,不在则将要求的值和减去列表当前索引的值作为键,当前的i为值存入map中,
这个存入的键就是列表中拼合成target下一个要找的值,上边例子第一个循环map存入的key是7,value是0,
找到下一个nums[i]==7则,这个7的位置与上个存入map键为7的位置的值的和就是求的target。不要忘了map
的7是由target-nums[i]求得的;
- 列表中的当前值在map中有对应的键,则返回map当前键的值和当前的i;
