https://leetcode.com/problemset/all/
1. 知识储备
1.1. 语言选择
- ⭐️C++:向下兼容C语言,拥有多个封装好的函数
- Java
1.2. 算法思想
双指针
排序
贪心思想
二分查找
分治
搜索(DFS,BFS)
动态规划
数学知识
1.3. 数据结构
官网总结
2. 如何刷题
按类型tag刷题,每个类型10-20题(动态规划:多多益善)
周一:树/链表 (树最容易培养框架思维-递归/DFS/BFS)
周二:搜索
周三:动态规划 …
第一遍:5分钟想不出来就看答案
第二遍:尝试不看答案完整实现,不超过60分钟
第三遍:快速实现
看别人的代码(论坛),至少3-5种不同的实现,分析优缺点,速度快慢
学习新的语言,算法,数据结构,API,模版
完整的手写实现,不要copy代码,增强肌肉记忆
运行时间70%左右的代码,阅读提高能力
扩宽思路-使用什么算法,推算时间复杂度,统一代码风格,取有意义的变量名
《剑指offer》覆盖基本题型
Top 100 Liked 高频题 ,Top 100 interview 经典题
重复刷2-3遍,看到题就有思路
按照公司tag刷,facebook,google,amazon - 一亩三分地
公司面经
3. 网站推荐
CSNotes:https://github.com/CyC2018/CS-Notes
牛客网:https://www.nowcoder.com/ta/job-code-high-week
codetop:https://codetop.cc/home
leetcode:
官网 https://leetcode.com/problemset/all/
中文 https://leetcode-cn.com/problemset/all/
4. 挑战赛
leetcode周赛 https://leetcode.com/contest/
牛客月赛
codetop按公司及岗位
5. 解析思路
https://zxi.mytechroad.com/blog/leetcode-problem-categories/
5.1. Tree(树)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
94 | Binary Tree Inorder Traversal | ★ | 144 145 429 589 590 | traversal |
100 | Same Tree | ★★ | 101 110 111 572 965 | |
102 | Binary Tree Level Order Traversal | ★★ | 107 429 872 | collecting nodes |
814 | Binary Tree Pruning | ★★★ | 669 1325 | |
112 | Path Sum | ★★★ | 113 437 | |
129 | Sum Root to Leaf Numbers | ★★★ | 257 | |
236 | Lowest Common Ancestor of a Binary Tree | ★★★ | 235 | |
297 | Serialize and Deserialize Binary Tree | ★★★ | 449 | |
508 | Most Frequent Subtree Sum | ★★★ | ||
124 | Binary Tree Maximum Path Sum | ★★★ | 543 687 | Use both children, return one |
968 | Binary Tree Cameras | ★★★★ | 337 979 |
5.2. Divide and conquer(分治)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
169 | Majority Element | ★★ | 你知道茴香豆的茴有几种写法吗? | |
153 | Find Minimum in Rotated Sorted Array | ★★ | 154 | |
912 | Sort and Array | ★★★ | merge sort | |
315 | Count of Smaller Numbers After Self | ★★★★ | merge sort / BIT |
5.3. List(链表)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
2 | Add Two Numbers | ★★ | 445 | traversal |
24 | Swap Nodes in Pairs | ★★ | reverse | |
206 | Reverse Linked List | ★★ | reverse | |
141 | Linked List Cycle | ★★ | 142 | priority_queue / mergesort |
23 | Merge k Sorted Lists | ★★★ | 21 | priority_queue / mergesort |
147 | Insertion Sort List | ★★★ | insertion sort | |
148 | Sort List | ★★★★ | merge sort O(1) space | |
707 | Design Linked List | ★★★★ |
5.4. BST(二叉搜索树)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
98 | Validate Binary Search Tree | ★★ | 530 | inorder |
700 | Search in a Binary Search Tree | ★★ | 701 | binary search |
230 | Kth Smallest Element in a BST | ★★★ | inorder | |
99 | Recover Binary Search Tree | ★★★ | inorder | |
108 | Convert Sorted Array to Binary Search Tree | ★★★ | build BST | |
501 | Find Mode in Binary Search Tree | ★★★ | inorder | |
450 | Delete Node in a BST | ★★★★ | binary search |
5.5. Graph(图论)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
133 | Clone Graph | ★★ | 138 | |
200 | Number of Islands | ★★ | 547 695 733 827 1162 | grid + connected components |
841 | Keys and Rooms | ★★ | 1202 | |
207 | Course Schedule | ★★★ | 210 802 | |
399 | Evaluate Division | ★★★ | 839 952 990 721 737 | union find |
785 | Is Graph Bipartite? | ★★★ | 886 1042 | bipartition, graph coloring |
997 | Find the Town Judge | ★★★ | in/out degrees | |
433 | Minimum Genetic Mutation | ★★★ | 815 863 1129 1263 | unweighted shortest path / BFS |
684 | Redundant Connection | ★★★★ | 685 1319 | cycle, union find |
743 | Network Delay Time | ★★★★ | 787 882 924 1334 | weighted shortest path |
847 | Shortest Path Visiting All Nodes | ★★★★ | 864 1298 | BFS |
332 | Reconstruct Itinerary | ★★★★ | Eulerian path | |
1192 | Critical Connections in a Network | ★★★★ | Tarjan | |
943 | Find the Shortest Superstring | ★★★★★ | 980 996 | Hamiltonian path (DFS / DP) |
959 | Regions Cut By Slashes | ★★★★★ | union find / grid + CCs |
5.6. Search (BFS/DFS)(搜索/回溯)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
17 | Letter Combinations of a Phone Number | ★★ | 39 40 77 78 90 216 | Combination |
46 | Permutations | ★★ | 47 784 943 996 | Permutation |
22 | Generate Parentheses | ★★★ | 301 | DFS |
37 | Sudoku Solver | ★★★ | 51 52 | DFS |
79 | Word Search | ★★★ | 212 | DFS |
127 | Word Ladder | ★★★★ | 126 752 818 | BFS |
542 | 01 Matrix | ★★★ | 675 934 | BFS |
698 | Partition to K Equal Sum Subsets | ★★★ | 93 131 241 282 842 | Partition |
5.7. Binary Search(二分搜索)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
35 | Search Insert Position | ★★ | 34 704 981 | upper_bound |
33 | Search in Rotated Sorted Array | ★★★ | 81 153 154 162 852 | rotated / peak |
69 | Sqrt(x) | ★★★ | upper_bound | |
74 | Search a 2D Matrix | ★★★ | treat 2d as 1d | |
875 | Koko Eating Bananas | ★★★ | 1011 | guess ans and check |
4 | Median of Two Sorted Arrays | ★★★★ | ||
378 | Kth Smallest Element in a Sorted Matrix | ★★★★ | 668 | kth + matrix |
719 | Find K-th Smallest Pair Distance | ★★★★ | 786 | kth + two pointers |
5.8. Two Pointers(双指针)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
11 | Container With Most Water | ★★ | 42 | |
125 | Valid Palindrome | ★★ | 455 | |
917 | Reverse Only Letters | ★★ | 925 986 855 | |
167 | Two Sum II – Input array is sorted | ★★★ | 15 16 | |
977 | Squares of a Sorted Array | ★★ | merge sort | |
992 | Subarrays with K Different Integers | ★★★★ |
5.9. Advanced(高级)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
208 | Implement Trie (Prefix Tree) | ★★★ | 648 676 677 720 745 211 | Trie |
307 | Range Sum Query – Mutable | ★★★ | BIT/Segment Tree | |
901 | Online Stock Span | ★★★ | 907 1019 | monotonic stack |
239 | Sliding Window Maximum | ★★★ | monotonic queue |
5.10. DP(动态规划)
Id | Name | Difficulty | Similar Problems | Comments |
---|---|---|---|---|
70 | Climbing Stairs | ★ | 746 1137 | I: O(n), S = O(n), T = O(n) |
303 | Range Sum Query – Immutable | ★ | 1218 | I: O(n), S = O(n), T = O(n) |
53 | Maximum Subarray | ★★ | 121 | I: O(n), S = O(n), T = O(n) |
62 | Unique Paths | ★★ | 63 64 120 174 931 1210 | I: O(mn), S = O(mn), T = O(mn) |
85 | Maximal Rectangle | ★★★ | 221 304 1277 | I: O(mn), S = O(mn), T = O(mn) |
198 | House Robber | ★★★ | 213 309 740 790 801 | I: O(n), S = O(3n), T = O(3n) |
279 | Perfect Squares | ★★★ | I: n, S = O(n), T = O(n*sqrt(n)) | |
139 | Word Break | ★★★ | 140 818 | I: O(n), S = O(n), T = O($n^2$) |
300 | Longest Increasing Subsequence | ★★★ | 673 1048 | I: O(n), S = O(n), T = O($n^2$) |
96 | Unique Binary Search Trees | ★★★ | I: O(n), S = O(n), T = O($n^2$) | |
1105 | Filling Bookcase Shelves | ★★★ | I: O(n) + t, S = O(n), T = O($n^2$) | |
131 | Palindrome Partitioning | ★★★ | 89 | I: O(n), S = O(2^n), T = O($2^n$) |
72 | Edit Distance | ★★★ | 10 44 97 115 583 1187 1143 1092 718 712 | I: O(m+n), S = O(mn), T = O(mn) |
1139 | Largest 1-Bordered Square | ★★★ | I: O(mn), S = O(mn) T = O(mn*min(n,m)) | |
688 | Knight Probability in Chessboard | ★★★ | 576 935 | I: O(mn) + k S = O(kmn), T = O(kmn) |
322 | Coin Change | ★★★ | 377 416 494 1043 1049 1220 1230 1262 1269 | I: O(n) + k, S = O(n), T = O(kn) |
813 | Largest Sum of Averages | ★★★★ | 1278 1335 410 | I: O(n) + k,S = O(nk), T = O(k$n^2$) |
1223 | Dice Roll Simulation | ★★★★ | I: O(n) + k + p,S = O(kp), T = O($n^2$kp) | |
312 | Burst Balloons | ★★★★ | 664 1024 1039 1140 1130 | I: O(n), S = O($n^2$), T = O($n^3$) |
741 | Cherry Pickup | ★★★★ | I: O($n^2$), S = O($n^3$), T = O($n^3$) | |
546 | Remove Boxes | ★★★★★ | I: O(n), S = O($n^3$), T = O($n^4$) | |
943 | Find the Shortest Superstring | ★★★★★ | 980 996 1125 | I: O(n),S = O(nx$2^n$), T = ($n^2$*$2^n$) |