刷leetcode 也一年多了,现在基本上median 可以15-20分钟做出。hard 如果手感好40分钟内也能过
我猜你们一定有这种情况。每次刷完题就忘,第二次拿起来仿佛就像新题。
也可能有小伙伴会疑惑,为什么像字节等的大厂要考算法?
这个是大家都存在的问题,而之所以大厂想考算法,原因在于快速选拔人才,和高考数学一个道理。
通过算法,可以筛选出几类人
- 特别聪明的,纵使没有刷过多少题,也能在提示下很快bug-free
- 特别勤奋的,做了无数的题目,对于每道题每种解法对答如流
- 特别喜欢该公司的,把该公司的题目刷了几个来回。
以上三种人才,公司招进来都不吃亏
因此你们发现了吧,公司想要高效率筛选人才,算法是一个很好用的工具
既然我们没有办法逃掉,那么如何快速准备呢?我以亲身经历解读一下,帮助你少走弯路
算法入门课
1.1 Algorithm Princeton
1.1.1 内容速览
第一章 简介 + 并查集
第二章 排序算法,包含归并,快速,堆,选择,希尔等排序。以及优先队列
第三章 Symbol table,二叉树,左倾红黑树,散列表
第四章 图,包括有向图,无向图,最小生成树,最短路径的两种算法
第五章 字符串,字符串排序,查找KMP等三种算法,正则表达式,霍夫曼树
第六章 背景, 包括B+树介绍等等(因为其他内容与刷题无关,就没写了)
1.1.2 学习顺序
本课程刚一开始就讲并查集,当时我在第一次听的时候很懵,以为算法刚开始就这么难了。内心满满的挫败感。
但实际上,一开始可以先听第二章,老头的用意是:
老头通过并查集案例来明确下面怎么结构化学算法。
一般老头会给案例应用场景,之后给出初步的算法
然后是对他的分析,包括时间和空间复杂度
并进一步优化
最后给出该问题算法可能的上界和下界。
可以说结构十分清晰
所以如果对图了解并不是很多,可以直接先把第1章跳过,从第2章开始听。
听课的顺序可以是2->3->4->5->1->6(章节)
视频当中给出的代码建议全部手敲一遍,因为他们不仅十分优雅,而且特别简洁,在比如优先队列当中,老头的实现就特别的漂亮
1.2 MIT 着重看DP,也就是 19-22集
这个是我看过最好的,最透彻的讲解DP题目的了
专题讲解 全部免费 点击标题跳转对应课程
dp[i][nk][0] = Math.max(dp[i - 1][nk][0], dp[i - 1][nk][1] + prices[i - 1]); dp[i][nk][1] = Math.max(dp[i - 1][nk][1], dp[i - 1][nk - 1][0] - prices[i - 1]);
while (root != null || !stack.isEmpty()) { while (root != null) { stack.push(root); root = root.left; } root = stack.pop(); res.add(root.val); root = root.right; }
全部评论
(3) 回帖