📅  最后修改于: 2023-12-03 15:12:46.649000             🧑  作者: Mango
这是门|门 IT 2007年第42题,是一道经典的计算机科学问题,考察的是算法和数据结构的基础知识。
给定一个无序数组nums
,我们要找到其中两个数的和为目标值target
,并返回这两个数的下标。
例如,如果数组nums
为[2, 7, 11, 15]
,目标值target
为9
,那么返回值应该为[0, 1]
,因为nums[0] + nums[1] = 9
。
这道题目的解法很多,但时间复杂度最优的解法是使用哈希表,其时间复杂度为$O(n)$。具体思路如下:
hash_map
,用于存储每个数的下标。nums
,对于每个数num
,计算出其需要与之配对的数target - num
。hash_map
中查找配对的数target - num
,如果找到了,则返回两个数的下标,否则将num
加入哈希表hash_map
中。def twoSum(nums, target):
hash_map = {}
for i in range(len(nums)):
complement = target - nums[i]
if complement in hash_map:
return [hash_map[complement], i]
hash_map[nums[i]] = i
这段代码使用Python语言实现了哈希表算法,时间复杂度为$O(n)$。其中,nums
为输入的无序数组,target
为目标值,函数twoSum
返回两个数的下标。