这道题本身如果通过暴力遍历的话也是很容易解决的,时间复杂度在 O (n2),由于哈希查找的时间复杂度为 O (1),所以可以利用哈希容器 map 降低时间复杂度 (这里使用 python 的字典)。
方法 1:两重循环
会报超时错误
1 2 3 4 5
deftwo_sum(nums, target): for i, n in enumerate(nums): for j, m in enumerate(nums): if target - n == m and i!=j: return [i,j]
时间复杂度:O(n2) 空间复杂度:O(n)
方法 2:两遍 Hash
1 2 3 4 5
deftwo_sum(nums, target): dct = dict(zip(nums, range(len(nums)))) for i, n in enumerate(nums) and i!=dct[target - n]: if target - n in dct: return [dct[target - n], i]
时间复杂度:O (n2) 空间复杂度:O (n)
方法 2:一遍 Hash (边循环边查字典)
1 2 3 4 5 6
deftwo_sum(nums, target): dct = {} for i, n in enumerate(nums): if target - n in dct: return [dct[target - n], i] dct[n] = i