题目:两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1]
思路:
看似很简单,两个for循环暴力穷举。但是有句话说的好:一入循环深似海,从此offer是路人。
for循环做出来基本上都会超时。
所以换一种方法,让定值减去数组中的元素,然后判断数值中是否存在。
使用字典模拟哈希查找,注意为了避免出现重复会被删除的操作,以及方便找出索引值,
这里使用Python enumerate()
函数
enumerate()
原理:
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
Python 2.3. 以上版本可用,2.6 添加 start 参数。
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
所以该题可以这样做:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dics = {
}
for id,num in enumerate(nums):
if target-num in dics:
return [dics[target-num],id]
dics[num] = id
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100105.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...