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

更多题解可以访问:https://github.com/suukii/91-days-algorithm

Last updated

Was this helpful?