给定一个整数数组 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
-
只会存在一个有效答案
💡分析:
1、整数数组nums,整数目标值 target;
2、数组中找到任意两个整数,和为目标值;
3、然后返回这两个整数在数组中的下标;
🛠️要求:
1、数组恰好仅有两个整数相加为目标值
2、返回的两个下标不可以相同
🫤思路:
循环数组,用目标值减去当前循环的整数;
看差值是否在已经循环的数组中,如果在的话,则返回整数和差值对应的下标。
综上所述:
首先需要定义一个存放已经循环的数组元素的容器,最好可以同时存放元素值和它之前的下标,由此想到 使用字典最为合适;
其次就是循环操作时,需要得到列表的元素值和下标,由此想到使用"遍历序列,并获取元素和下标值的python内置函数enumerate(iterable,start=0)",来实现循环操作;
现在开始编写代码:
class Solution(object):
def twoSum(self, nums: List[int], target: int) -> List[int]:
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
# 哈希表 字典判断
num_dict = {}
for index,num in enumerate(nums):
# 计算差值
d_value = target - num
# 如果 差值在字典中,直接取字典值对应的下标,并返回结果
if d_value in num_dict:
return [num_dict[d_value],index]
# 如果差值不在字典,将当前值和下标存入字典中
num_dict[num] = index