- #刷题
- #工作信息
- #求职
- #leetcode
- #攻略
两年刷题经验总结

932953
ng 一枚, 刷题两年, 断断续续, 目前为止总共刷了400+。 对于面试中所有的medium题目, 基本都可以秒杀。 2020 fall, 拿到了4个面试,3个onsite。 只有第一个面试挂了(挂在面试技巧上面了),另外三个onsite全部拿到offer了。
个人的刷题路径
1. 刷easy题。主要寻找做题的感觉。
2. 刷linkedlist, tree。 原因一是面试中这两类题考的频率较高, 原因二是刷这两类题有助于对递归的理解, 为后面刷DFS打下基础。
3. 刷DFS。 DFS非常重要,因为大部分 brute force 基本都可以用dfs来求解。 刚开始刷DFS, 可以重点关注pemutation 和 combination的题目, leetcode 这两类题也挺多的。 然后开始总结, 去理解 “状态(state)” 这个概念,对于每道DFS问题, 要清晰的定义出 “状态(state)”, 以及状态如何转移, 这方面的基础可以为DP打下基础。
4. 记忆化搜索。 也就是DFS + 记忆。记忆的存储通常用map或者set即可。
5. DP。 记忆化搜索刷熟了,可以尝试开始刷经典的DP,理解状态 和 状态转移,尝试自己去写出状态转移方程。 尝试DP的两种实现方式 top-down(也就是记忆化搜索) 和 bottom-up
6. 高频数据结构, stack, queue, heap。 这三个数据结构在面试中出现频率非常高。
7. 其他重点专题: sliding window, sort(特别是快速排序 和 归并排序), two pointers, graph, bfs, trie, union find
个人的其他刷题方式,我通常会结合不同的刷题方式。
1. 只看题,不写代码。 我通常会从brute force 开始求解, 然后逐步优化。 如果10-20分钟以内想不出解法, 直接去看答案了。
2. 对于一道题, 精耕细作, 举一反三。 精耕细作是指 学习优秀代码, 一题多解 以及 如何从brute force推导到最优解,并且了解这个过程的思路是如何形成的。 举一反三是指看类似的题目, 总结共同特性。
3. 参加竞赛。 训练快速做题, debug , 写代码的能力。
其他tips
1. 刷题初期追求量,一道题不可花太长时间, 控制在30分钟以内
2. 最好不依赖IDE, 训练直接在leetcode 页面写代码。
3. 定期回过头总结刷过的题。
4. 不要盲目刷题, 适可而止,刷够了,要转战到面试技巧上面, 面试技巧和刷题一样重要。(因为我就有一个面试挂在面试技巧上面, 非常后悔)
刷题感悟:理解 子问题。 对于每一个问题, 定义子问题是什么, 然后如何从子问题推导出原问题的解。 对于DFS, 就是穷举每个子问题。 DP就是因为存在重叠子问题。 贪心就是每次以子问题的最优解作为原问题的最优解。
以上是个人经验总结, 欢迎讨论。
个人的刷题路径
1. 刷easy题。主要寻找做题的感觉。
2. 刷linkedlist, tree。 原因一是面试中这两类题考的频率较高, 原因二是刷这两类题有助于对递归的理解, 为后面刷DFS打下基础。
3. 刷DFS。 DFS非常重要,因为大部分 brute force 基本都可以用dfs来求解。 刚开始刷DFS, 可以重点关注pemutation 和 combination的题目, leetcode 这两类题也挺多的。 然后开始总结, 去理解 “状态(state)” 这个概念,对于每道DFS问题, 要清晰的定义出 “状态(state)”, 以及状态如何转移, 这方面的基础可以为DP打下基础。
4. 记忆化搜索。 也就是DFS + 记忆。记忆的存储通常用map或者set即可。
5. DP。 记忆化搜索刷熟了,可以尝试开始刷经典的DP,理解状态 和 状态转移,尝试自己去写出状态转移方程。 尝试DP的两种实现方式 top-down(也就是记忆化搜索) 和 bottom-up
6. 高频数据结构, stack, queue, heap。 这三个数据结构在面试中出现频率非常高。
7. 其他重点专题: sliding window, sort(特别是快速排序 和 归并排序), two pointers, graph, bfs, trie, union find
个人的其他刷题方式,我通常会结合不同的刷题方式。
1. 只看题,不写代码。 我通常会从brute force 开始求解, 然后逐步优化。 如果10-20分钟以内想不出解法, 直接去看答案了。
2. 对于一道题, 精耕细作, 举一反三。 精耕细作是指 学习优秀代码, 一题多解 以及 如何从brute force推导到最优解,并且了解这个过程的思路是如何形成的。 举一反三是指看类似的题目, 总结共同特性。
3. 参加竞赛。 训练快速做题, debug , 写代码的能力。
其他tips
1. 刷题初期追求量,一道题不可花太长时间, 控制在30分钟以内
2. 最好不依赖IDE, 训练直接在leetcode 页面写代码。
3. 定期回过头总结刷过的题。
4. 不要盲目刷题, 适可而止,刷够了,要转战到面试技巧上面, 面试技巧和刷题一样重要。(因为我就有一个面试挂在面试技巧上面, 非常后悔)
刷题感悟:理解 子问题。 对于每一个问题, 定义子问题是什么, 然后如何从子问题推导出原问题的解。 对于DFS, 就是穷举每个子问题。 DP就是因为存在重叠子问题。 贪心就是每次以子问题的最优解作为原问题的最优解。
以上是个人经验总结, 欢迎讨论。