第一部分:题目描述
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:
输入:nums = [3,3], target = 6
输出:[0,1]
提示:
2 <= nums.length <= 104-109 <= nums[i] <= 109-109 <= target <= 109- 只会存在一个有效答案
第二部分:代码实现
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_map={}#存储数字和索引(那些没用的)
for i,num in enumerate(nums):
shengyu=target-num
if shengyu in num_map:
return [i,num_map[shengyu]]
else:
num_map[num] = i#说明这个值不满足题目要求,放到num_maps里面
第三部分:代码解析
(1)基本知识点
python中的数组使用list列表[]来实现,代表输入的一串数字;
字典是{},可以用这个带存储列表中"索引index"和"值value"的对应关系;
enumerate() 函数的作用: 同时列出数据 和数据对应的下标(索引)
num_map[num] = i的作用:字典[键] = 值,将数字和对应索引存入num_map
nums = [2, 7, 11, 15]
num_map = {} # 存储数字和索引
for i, num in enumerate(nums):
num_map[num] = i
print(num_map)

(2)坑1
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_map={}#存储数字和索引
for i,num in enumerate(nums):
num_map[num] = i#字典[键] = 值,将数字和对应索引存入num_map
for i,num in enumerate(nums):
first_number=num
second_number=target-first_number
if second_number in num_map:
return num_map[first_number],num_map[second_number]

(3)坑2
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_map={}#存储数字和索引
for i,num in enumerate(nums):
num_map[num] = i#字典[键] = 值,将数字和对应索引存入num_map
for i,num in enumerate(nums):
first_number=num
second_number=target-first_number
if second_number in num_map and second_number !=first_number:
return num_map[first_number],num_map[second_number]
if语句变成了:if second_number in num_map and second_number !=first_number:来解决坑1:

(4)最终解决方法
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
num_map={}#存储数字和索引(那些没用的)
for i,num in enumerate(nums):
shengyu=target-num
if shengyu in num_map:
return [i,num_map[shengyu]]
else:
num_map[num] = i#说明这个值不满足题目要求,放到num_maps里面

解决了所有问题!