📅  最后修改于: 2023-12-03 15:28:48.165000             🧑  作者: Mango
门|门 IT 2005
问题 8在一个数组中,找出两个数字之和等于给定的目标值,返回这两个数字的下标。假设每个输入只对应一个答案,且同样的元素不能被重复利用。
例如:
输入: nums = [2, 7, 11, 15], target = 9
输出: [0, 1]
解释: nums[0] + nums[1] = 2 + 7 = 9
对于每个元素,依次寻找与之配对的元素,时间复杂度为 $O(n^2)$。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
使用哈希表存储每个数字的索引,对于每个数字,在哈希表中查找是否存在另一个数字与之配对,时间复杂度为 $O(n)$。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hash_table = {}
for i, num in enumerate(nums):
if target - num in hash_table:
return [hash_table[target - num], i]
hash_table[num] = i
暴力枚举法的时间复杂度较高,虽然可以解决问题,但不适用于大规模数据的处理。哈希表法可以在O(n)的时间复杂度内找到答案,是比较优秀的解决方案。