动画
算法动画图解:两数之和(哈希表)
思路
哈希表map
用来保存一个数,另一个数在遍历nums
的时候和map
中的数尝试求和是否为target
,如果求和不满足则存入map
,继续遍历nums
。
算法
- 遍历数组
nums
,i
为当前下标,每个值都判断map
中是否存在target-nums[i]
的值 - 如果不存在则将当前的
[nums[i], i]
存入map
中,继续遍历直到找到为止 - 如果存在则找到了两个值并返回
func twoSum(_ nums: [Int], _ target: Int) -> [Int] {
var map = [Int: Int]()
for i in 0..<nums.count {
if let j = map[target - nums[i]]{
return [j, i]
}
map[nums[i]] = i
}
return []
}
复杂度分析
- 时间复杂度:O(N),其中N是数组中的元素数量。对于每一个元素
nums[i]
,我们可以O(1)地寻找target - nums[i]
。 - 空间复杂度:O(N),其中N是数组中的元素数量。主要为哈希表的开销。