专做皮鞋销售网站,易语言如何建设网站,韩国服务器,建设银行的官方网站电脑版题目描述#xff1a;
给定一个整数数组 nums 和一个整数目标值 target#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数#xff0c;并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是#xff0c;数组中同一个元素在答案里不能重复出现。…题目描述
给定一个整数数组 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只会存在一个有效答案 思路分析
当我们需要查询一个元素是否出现过或者一个元素是否在集合里的时候就要第一时间想到哈希法
针对本题我们不仅要知道元素有没有遍历过还要知道这个元素对应的下标这就需要使用key value的结构。key来存放元素value用来存放下标 使用字典正合适。
判断元素是否出现这个元素就要作为keykey对应的value用来存下标。
接下来来看使用字典进行编写的代码首先定义一个字典records然后使用enumerate函数来遍历获取列表的下标和值然后判断target与当前值的差是否在records里面如果不在则在records字典中添加这条记录{元素下标}循环遍历列表nums每次检查target-value的差值是否在records里面有对应的key如果有则以列表的形式返回这个对应的key的下标和当前的下标。
使用集合来做这道题也比较简单原理是一样的首先定义一个集合然后同样使用enumerate来遍历nums得到下标和值每次获取target和num的差值然后查看这个差值是否在定义的集合中如果不在就添加num如果在就返回对应的这个差值的索引和当前遍历值的索引。
代码分析
# 解法一使用字典
class Solution:def twoSum(self, nums: List[int], target: int) - List[int]:records dict()for index, value in enumerate(nums):# 遍历当前元素并在map中寻找是否有匹配的keyif target - value in records:return [records[target-value], index]# 如果没找到匹配对就把访问过的元素和下标加入到map中records[value] indexreturn []# 解法二使用集合
class Solution:def twoSum(self, nums: List[int], target: int) - List[int]:#创建一个集合来存储我们目前看到的数字seen set() for i, num in enumerate(nums):complement target - numif complement in seen:return [nums.index(complement), i]seen.add(num)