考察频率从高到低
题目 | 解法 | 时间复杂度 | 频度 |
---|---|---|---|
1.无重复字符的最长字串 | 滑动窗口,Hash | O(n) | 695 |
2. 反转链表 | 两种做法: 递归 or 递推 | O(n) | 594 |
3. LRU | 双向循环链表,Hash | O(1) | 564 |
4. 数组中的第K个最大元素 | partition + 三路排序(非必须) | O(n) | 428 |
5. K 个一组翻转链表 | dummhead + (bg, ed, l, r) + 反转链表 | O(n) | 347 |
6. 三数之和 | 排序,遍历,对撞指针 | O(n ^ 2) | 320 |
7.最大子数组和 | 维护最小前缀值 | O(n) | 276 |
8.手撕快速排序 | 要三路快排才能过,懒得学,先写个朴素partition版本上去 | O(logn) | 263 |
9.合并两个有序链表 | 递归写法,很吊 | O(n) | 252 |
10.两数之和 | hash标存一下每个数出现过的下标 | O(n) | 252 |
11.最长回文子串 | 中心扩展 or DP or 马拉车 | O(n^2) | 236 |
【有意思的题】12.搜索旋转排序数组 | 两次二分 or 一次二分(逻辑复杂一点) | O(logn) or O(2logn) | 231 |
13.二叉树的层序遍历 | BFS | O(n) | 230 |
14.岛屿数量 | BFS or DFS or 并查集 | O(n) | 220 |
15.买卖股票的最佳时机 | 维护1~n的最小值 | O(n) | 217 |
16.环形链表 | 快慢指针 | O(n) | 215 |
17.有效的括号 | 栈(用双向队列实现) | O(n) | 215 |
18. 合并两个有序数组 | 逆向双指针 | O(n) + 空间复杂度O(1) | 211 |
|42.寻找两个正序数组的中位数||O(log(n+m)|119|
|最小K个数|partition,跟数组中第k个最大元素一个做法|O(n)|8|
一些想法:
6. 三数之和 用到的对撞指针的原理,其实就是 搜索二维矩阵 II,每次都切割一行或一列,时间复杂度就是O(n+m)