一,题目描述
给定一个整数数组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]
二,问题解读
在这个问题中,找到列表中任意两数(非连续)的值等于target就可以了,其中题目有确定给的答案,就是不会出现没有两数和等于target的情况,则不用异常检验。
三,解题思路
首先肯定是暴力求解法,两个for循环遍历,但是容易超出程序实践限制。所以采用哈希表。
创建一个哈希表,便利这个列表,每次遍历的值用target减去该值,求得的结果如果在哈希表中不存咋的话,将该值和其索引一一对应保存到哈希表里。每次遍历求得的结果如果在哈希表里没有,则将该遍历值加入到哈希表里,如果有则直接输出这次遍历的索引和哈希表里与其值相等的值的索引,以数组的形式返回。在python中,字典dict有键和值一一对应,所以可以用字典简单表示次哈希表。
举个例子:num=[6,3,8,2,1],target=8,哈希表dict={}则
第一次遍历:8-6=2,将6存入dict={0:"6"};第二次遍历:8-3=5,将3存入哈希表里dict={0:"2",1:"3‘};第三次遍历:8-8=0,将8存入哈希表中dict={0:"2",1:"5",2:"8"};第三次遍历:8-2=6,6在哈希表中,则输出索引0和2的索引3,即(0,3)
四,代码分析
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable = dict() # 创建一个空的字典,用于存储数字和它们的索引
for i, num in enumerate(nums): # 遍历 nums 列表,同时获得数字和它们的索引
if target - num in hashtable: # 检查是否存在一个数字,使得它与当前数字的和等于 target
return [hashtable[target - num], i] # 如果存在,返回这两个数字的索引
hashtable[num] = i # 否则,将当前数字及其索引存入字典
return [] # 如果没有找到满足条件的数字,返回一个空列表
def twoSum(self, nums: List[int], target: int) -> List[int]:
self
:这是 Python 类中方法的第一个参数,代表对象自身。通常用于面向对象编程,但在该函数中并没有使用这个参数,因此可以忽略它。
nums
:这是一个参数,用于传递一个整数列表(List[int]),即一个包含整数的列表。
target
:这是一个参数,用于传递一个整数,表示目标和的值。
-> List[int]
:这是一个类型提示(type hint),用于指定该函数的返回类型。它表明该函数返回一个整数列表(List[int])。
函数enumerate()的用法
enumerate
是 Python 中的一个内置函数,用于同时获得迭代的元素和其对应的索引。它常用于for
循环中,特别是当你需要在迭代时知道元素的位置时。具体用法;
fruits = ['apple', 'banana', 'cherry'] for index, fruit in enumerate(fruits): print(f"Index {index}: {fruit}")
Index 0: apple Index 1: banana Index 2: cherry
今日一笑:
你要想处理好身边人的关系,你就要走进每个人的心理世界。然而,你这一生时间有限,有限到你没有时间走进他们的世界,所以关系复杂,你能做的特别有限,有限到你有一种幻觉,幻觉到岁月静好……你能做的就是少说话,甚至不说话。