为了跳槽,我目前为止刷了小四百道leetcode,也算是有一些经验,今天就跟大家分享下学习方法和我总结的干货。
注:文末附资料下载~
如何找到感觉
讲起算法,我看过不少书,有《算法导论》、《算法第四版》、《算法竞赛入门经典》、《剑指Offer》,但都没有让我产生质变,现在回想原因可能是:
- 看书的时候着急,不过脑子直接看解析,也不记笔记,过几天就忘了
- 看完书就觉得自己会了,直接 Leetcode 随机选题,还是不会,内心受挫就不想刷了
后来发现了 Leetbook 这个宝藏,才算是找到了适合自己的刷题方法。其实就一句话:
有体系,重实战。
有一个大概的知识体系后,以深度优先遍历的方法循序渐进的实战,让自己把每个知识点彻底挖透记牢。Leetbook 是 Leetcode官方提供的课程,它的好处是把算法归类为各个章节,而且大部分章节都是免费的。
如上图,在入门的时候就不要刷那种高频面试题了,先把数据结构和算法的各个基础打好。每个 book 里都是先教学、再由易到难地实战,一个知识点大概有十几道题,刷完基本上就能掌握一些套路,到medium的水平了。
然后才是去看各种面经和高频题,给自己查漏补缺,并且要稍微记录一下,几行代码或者解题思路,方便自己快速复习。下面就是我去年刷题时的笔记(文末下载):
刷题时避免不了会有挫败感的,每次觉得自己很nb了,还是会在一些题上卡住。从个人感觉来看,0到100道是最难的一道坎,如果去刷 Leetbook 的话,不知不觉就够了。其次是100-300这个阶段,要靠自己的自律去支撑,突破之后对每个知识点的套路就都了解了,再往后就是看各种刁钻的思路。
如何通过算法面试
再讲到面试,是最考验心态和沟通的一个环节,不管做没做过,拿到题目之后都要走以下几步:
- 复述题目,和面试官确认细节
- 先找一些简单case,画图解决,再找一些难的case,确认自己的思路正确
- 通过一个例子给面试官讲解自己的思路,之后展示代码,注意强调边界条件的处理
如果刷题量够的话,看到题目应该就知道考点了,接下来就是往标准解题思路上套;如果不知道考点在哪,就和面试官沟通一下,说明自己怎么思考的、卡在了哪里,千万别直接撂挑子不做,面试官都没机会给你机会,即使他提示了做不出来也要给出想法思路,把他熬不住了主动叫停。
如果没做出来,还有一个拉好感的方法,能成功加到面试官微信的话,自己私下继续研究完把思路发给他,买卖不成态度在,下次有hc说不定就想到你这个勤学的孩子了。
干货来了
唠叨了这么多,下面就是干货环节,放上我觉得值得刷的题,后面的字母是难度,同学们可以掌握各个知识点的基础之后再来刷这些题。
栈
链表
- 206. 反转链表 E
- 160. 相交链表 E
- 876. 链表的中间结点 E
- 21. 合并两个有序链表 E, 23. 合并K个升序链表 H
- 141. 环形链表 E, 142. 环形链表 II M
- 19. 删除链表的倒数第 N 个结点 M
- 287. 寻找重复数 M
- 146. LRU 缓存机制 M
并查集
- 200. 岛屿数量 M
- 字节跳动大闯关
树
二叉树
- 二叉树前序/中序/后序遍历
- 112. 路径总和 E, 113. 路径总和 II M, 437. 路径总和 III M
- 236. 二叉树的最近公共祖先 M
- 958. 二叉树的完全性检验 M
- 124. 二叉树中的最大路径和 H
平衡二叉树
- 基本原理和操作
- 为什么有了BST和AVL还需要红黑树
完全二叉树
- 完全二叉树的插入
- 222. 完全二叉树的节点个数 M
哈希表
前缀和+哈希表
查找
二分查找
- bug-free写法:左闭右开,先写排除中位数的逻辑
- 189. 旋转数组 M, 153. 寻找旋转排序数组中的最小值 M, 154. 寻找旋转排序数组中的最小值 II H
- 162. 寻找峰值 M
- 287. 寻找重复数 M
- 4. 寻找两个正序数组的中位数 H
- 668. 乘法表中第k小的数 H
- 719. 找出第 k 小的距离对 H
- 793. 阶乘函数后K个零 H
BFS
DFS
双指针
滑动窗口
排序
- 插入:插入排序, 选择排序
- 选择:选择排序, 堆排
- 交换:冒泡排序, 快速排序, 快排优化
- 归并排序, 原地归并, 剑指 Offer 51. 数组中的逆序对 H, 327. 区间和的个数 H
- 基数排序
- 148. 排序链表 M
- 拓扑排序
字典序
TopK问题
动态规划
- 72. 编辑距离 H
- 516. 最长回文子序列 M, 5. 最长回文子串 M
- 1143. 最长公共子序列 M
- 300. 最长递增子序列 M
- 53. 最大子序和 E
- 背包问题
- 最短路径:Dijkstra, Floyd, Bellmanford, Johnson
- 121. 买卖股票的最佳时机 E, 122. 买卖股票的最佳时机 II E, 123. 买卖股票的最佳时机 III H, 188. 买卖股票的最佳时机 IV H
模式匹配
- 单模式单匹配:KMP
- 多模式单匹配:Trie
- 多模式多匹配:AC自动机
大数据
- 蓄水池抽样法
最后,该给的我都给了,这个假期能不能量变引发质变就看大家了(拍肩!
资料下载地址
采用C++实现,大佬对题目都进行了归类整理,十分适合初学者