|
发表于 2023-7-25 22:03:04
|
显示全部楼层
当然,这个问题可以通过哈希表来解决,复杂度为 O(n)。以下是一个 Python 解决方案:
- def twoSum(nums, target):
- num_map = {} # 建立哈希表
- for i, num in enumerate(nums):
- complement = target - num
- if complement in num_map: # 如果 complement 存在于哈希表中
- return [num_map[complement], i] # 返回 complement 的索引和当前数字的索引
- num_map[num] = i # 否则,将当前数字和其索引添加到哈希表中
- return []
- # 测试代码
- print(twoSum([2,7,11,15], 9)) # 输出:[0,1]
- print(twoSum([3,2,4], 6)) # 输出:[1,2]
- print(twoSum([3,3], 6)) # 输出:[0,1]
复制代码
这个函数遍历 nums 列表,对于每一个元素,它试图找到 target - num 的值是否已经在哈希表 num_map 中。如果找到,就返回这两个元素的索引。如果没有找到,就把当前的元素和它的索引添加到哈希表中。由于哈希表的查找操作是 O(1),所以总的时间复杂度是 O(n)。 |
|