线性查找(暴力)
解题思路:先枚举数组中的某一个数x
,然后寻找数组是否存在target-x
时间复杂度:O(N^2)
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
n = len(nums)
for i in range(0,n):
for j in range(i+1,n):
if nums[i]+nums[j] == target:
return [i,j]
return []
哈希表
解题思路:使用哈希表查找是否存在target-x
;通过键值保存数组值与索引,之后寻值(target-nums[i])时可以一步寻到,不用再次遍历数组
哈希表:根据key值直接访问值value,无须经过遍历
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashtable = dict()
// 遍历数组nums,i为当前下标
for i, num in enumerate(nums):
// 判断hash表中是否存在target-num值,即target-num[i]的key值
if target - num in hashtable:
// 如果存在,则返回此数值的下标(,说明已经找到了两个值)
return [hashtable[target - num], i]
// 如果不存在,则将当前的i值存入hash表中
// 保证同一个数,不会匹配两次
hashtable[nums[i]] = i
return []