登录
  • #刷题
  • #工作信息
  • #求职
  • #leetcode
  • #攻略

两年刷题经验总结

jackben
9329
53
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就是因为存在重叠子问题。 贪心就是每次以子问题的最优解作为原问题的最优解。

以上是个人经验总结, 欢迎讨论。
53条回复
热度排序

发表回复