1. 两数之和
https://leetcode-cn.com/problems/two-sum
题目描述
方法 1:哈希表
思路
在遍历数组的同时把数字和下标存进哈希表中,然后看 目标值 - 当前数字 是否存在于哈希表中,有的话直接返回结果,没有就继续遍历。
由于不能使用同一个元素,要注意先检查,再将当前数字加入哈希表。
复杂度分析
时间复杂度:$O(N)$,N 为数组长度,最坏的情况下数组中的每个元素都被访问一次,访问数组元素的时间是 $O(1)$,哈希表插入和查询元素的时间也是 $O(1)$。
空间复杂度:$O(N)$,N 为数组长度,用来存元素和下标的哈希表所需的空间。
代码(JavaScript/Python/C++)
JavaScript Code
Python Code
C++ Code
方法 2:排序+双指针
思路
先给数组排序,再用双指针查找。
不过题目要求返回下标,所以排序之前还需要保存原本的下标。
复杂度分析
时间复杂度:$O(NlogN)$,N 为数组长度。
空间复杂度:$O(N)$。
代码
JavaScript Code
方法 3:暴力法
思路
暴力法也顺便做一下吧。
复杂度分析
时间复杂度:$O(N^2)$,N 为数组长度。
空间复杂度:$O(1)$。
代码
JavaScript Code
Last updated
Was this helpful?