Skip to content

Instantly share code, notes, and snippets.

@jingriver
Last active February 19, 2022 21:38
Show Gist options
  • Save jingriver/4a16c7eaa4eb6e1eab5bb91abed221ad to your computer and use it in GitHub Desktop.
Save jingriver/4a16c7eaa4eb6e1eab5bb91abed221ad to your computer and use it in GitHub Desktop.
leetcode
https://hackernoon.com/top-10-system-design-interview-questions-for-software-engineers-8561290f0444
https://medium.com/@codingfreak/binary-tree-interview-questions-and-practice-problems-439df7e5ea1f
https://cspiration.com/leetcodeClassification
heap sort
https://www.hackerearth.com/practice/algorithms/sorting/heap-sort/tutorial/
https://medium.com/@randerson112358/lets-build-a-min-heap-4d863cac6521
https://stackblitz.com/
https://cs.lmu.edu/~ray/classes/a/
https://oi-wiki.org/
@jingriver
Copy link
Author

https://www.1point3acres.com/bbs/thread-577702-1-1.html
首先声明一点,面试是面试,做题是做题,做题是面试的必要条件。接下来 ,就我做了这些题的感悟,主要是给自己做个纪念,也分享下我的见闻。

1 说说我认识的刷题套装
编辑器 : vscode sublime 都行, 不过我偏好IDEA的原因是因为可以写单元测试,这对我复习,调试并验证我的代码正确性很重要。
IDEA 也可以调成文本编辑模式, 点击IDEA右下角的帽子图标,取消code auto complete。取消syntax 或者 highlight都行。

250道包含内容:2个top系列为主+外加一些高频题目和自己认为薄弱的题目
2 leetcode外挂插件 : 目前 有了已经开发了leetcode刷题插件,不需要取网页端浏览,直接编辑器里面浏览,自动生成。
https://github.com/shuzijun/leetcode-editor

网页端的一个油猴插件 : 自动切换国区和美区 , 搜索答案 , 个人用的还算不错 。 具体功能自己装个油猴插件 ,自己玩玩吧
https://greasyfork.org/zh-CN/scr ... 3%E5%8A%A9%E6%89%8B

3 推荐参考答案: grandyang的文字解答 和 花花酱的视频 为主。还有 水中的鱼 , LEE215 等
个人主观评价:花花酱做的视频基本很精品,覆盖的题目都比较全了,也做了分类。适合小白和一定刷题经验的人。
每个视频时长基本控制在20min以内,讲的很好,好在除了 给你解题思路和复杂度简略分析,还会融会贯通,连带在视频内 提示并放出相关类似的题目的YouTube视频链接。
花花酱本人的履历 我也算搜过, 看他的解答 很放心!
答案的基本版本是 C++一定有。 Python和JAVA 现在也带上了。
唯一缺点就是:没有评论区,YouTube视频下面贴代码也不太好。

然后再来说说,grandyang的, 文字描述功底 我认为早期版本可能不太行,后期版本都是不错的。
他的文字性题解思路描述 可以 让你在5min内了解这道题目的大致解题思路,不用费心思看你可能认为20min很长会让你睡觉的视频解答。
grandyang 尽量都提供一题多解,并在文章末尾附上原题链接和 JAVA C版本的vote数较高的答案。
当然,我后说grangdyang,是因为我个人觉得他的部分答案,没讲到关键点子上。。。比如DP类型的 背包问题 ,举个例子 312 burst ballon 区间DP
所以, grandyang的答案的缺点是在于, 有些经典题目 可能并没有 帮助你了解这类型问题的本质。
最后,这只是我的个人看法,从心里面上来说,我很感谢两位提供这么棒的答案。

LEE215 不错了 ,不过没有思路讲解,吸收的养分比较少。但是代码写的是整洁!
其他收费的视频,我直言很垃圾 ,缴纳智商税。。。。走捷径不是不可以,但是那些弯路你最后还是要走,为什么硬要把他们分离开,先走捷径呢?

4 关于学习材料:除了leetcode还有什么可以看看的?
这个问题,比较难回答。
我之前也买了刘汝佳的算法竞赛入门经典(第2版) 还有配套答案和训练集。
https://book.douban.com/subject/25902102/
最后也没仔细去学,不过当做参考书也还是不错的。
前期我还去了解了USACO CODEFORCE HDOJ POJ ZOJ TopCoder 等等是干啥的。
至于编程之美和微软技术面试心得 剑指offer我没学过 好像有些经典题目就是从这里出的。

这里,我想推荐下 https://oi-wiki.org 这个面向初高中的OIER的网站, 网站发起人目测是THU的。。

这个网站,我获取了什么有用的信息?
我从OI的视角,将leetcode题目置于 OI领域,看看主要考察什么。
毕竟leetcode一定程度上就代表面试算法题部分的考察项目嘛
dp分类 字符串处理 数论 基础的数据结构 位运算的基本和灵活应用,
线段树 树状数组 区间DP 树形DP RMQ ST表等了解或理解

另外,就是崔添翼大佬的背包九讲V2,我个人的学习能力停留在第六章,第七章及以后的 听不太懂。。。
前面几章相当经典,是培养我DP启蒙的一个小册子。感谢这位大佬 撒花🌸🌸🌸🌸🌸🌸🌸🌸
暂时想到的就这些。

5 算法和数据结构学习应该有怎么样的顺序: 我个人犯的错误就是前期刷题质量和效率太低,埋了很多雷。

首先 二分查找 左闭右开的lower_bound写法一定要理解 。这是一种思想。而不是简单的查找数值!!
排序的话,快排 和快排的切分 默写程度吧,3向快排和归并排序 也要能默写咯 ,其他自己看着办吧

接下来谈谈 栈和队列的运用的
基于栈LIFO的数据结构特点,DFS的非递归肯定用栈啦,单调性栈 的运用 这个自己去体会吧。
队列的话 FIFO特点, BFS 肯定用得上了 。 BFS问题 比如课程表,接雨水Ⅱ

优先队列 用在哪里 ? top k系列问题 以及 依赖于优先队列的BFS遍历
二叉堆和二叉树 ,高度, 深度 ,叶子结点 ,非叶子节点 ,这个需要理清楚 。
二叉树 基本上用递归为主了 。遍历方式:递归,非递归,morris遍历 , 高度和深度计算 。
链表的话 考察的比较少 环检测 翻转链表 必须会吧 ,哑节点dummynode的运用。
树状数组 ST表 就是一个二进制倍增思想的运用吧,这个在崔添翼大佬的背包九讲里面有提及,我认为可以不用学,尝试下还行。UF的话 也比较常见,这个还好了,碰到的比较简单,要么连通性判断,要么连通图个数计算。

6 刷题用什么语言: 从功利性角度来看 JAVA C++比较稳了,毕竟leetcode答案 语言版本也是这2种最为常见。
Python 答案 代码是少, 代码少并不代表 你就能容易理解这个答案。
所以经常leetcode讨论区会有show 几行Python代码 solution 我觉得这并没有提供有效的信息。

7 说说leetcode的tag分类: 我认为唯一一点做的不好的是DP分类
dp是一个比较宏大的概念,细分下来有很多种经典的DP,让人印象深刻的股票系列 烧气球 数组切割求最值问题
其他tag归类我认为都okay
以下内容需要积分高于 50 您已经可以浏览

8 leetcode用国区还是美区?我现在用国区。不过我倾向于还是用美区吧。有点自相矛盾哈哈美区毕竟有高质量的讨论,国区比较少,而且可以训练 英文算法题的 阅读理解嘛2333
最近,国区出了一个很弱化的 app。

9 我的做题策略:
5-10min不会,直接看答案,看grandyang或者花花酱的。
起初,我还不好意思。
后来,我发现你看了这道题目确实就会做了,以后碰到,大概率还是会做的,起码有思路,毕竟自己手抄或者理解过
感悟:还是自己做的题目少,对题目的嗅觉不太行。
力求某个YouTube培训机构讲的 争取做到一题多解和多题一解或者说通用解,通用模版

置于细化的做题策略: 个人经验比较少。
基本路子 就是先想想看解题 思路 ,
声明 数据结构变量,初始化赋值 (0,-1,+∞,-∞)。
招到循环调节或者递归更新条件
最后迭代下。。。

至于 担忧15min就放弃思考,以后出新题,你还是可能依旧做不出来?
这个嘛,我认为一半对一半,15min以内想不出,就直接看答案,确实没有培养出解题不投降的意志力,但是也有好处,在于见多识广😄。

10 那些依旧恐惧的题目类型: 字符串的 模式匹配, 栈在计算器的复杂应用,数论题目(数论的题目,基本上属于会就是会,不会就是不会,死也想不出来)。
DP套DP或者 2个DP的题目 , 难呐

11 关于边界, cornercase 的敏感度, 我目前不太会想到,还是自己太菜了。

数组我应该 base 0 还是 base 1 还有off by one error,这个没多少经验。

循环条件 到底 小于 还是 小于等于 ? 我就是用例证法,举个普通的例子,问题规模1到5个内为宜,去判定条件小于还是小于等于。

12 如何二刷,复习和回顾,
这个做leetcode题目之前,就想要写单元测试。
assert 自己答案的输入和输出 ,
方便我以后快速回忆定位某类行题目的答案。
因为leetcode网页版 提交记录里面找自己的答案 不方便。
也有人做Excle, 记录自己的解题关键点。

13 理解和记忆:我目前脑子中记忆的就是 二分 快排切分 ,一些BFS,DFS,DP模版,JAVA常用数据结构的API,尽量理解典型类型的思路,做到万变不离其宗吧 2333,

14 算法题不是数学题,推导可以,证明我还是放弃了 GG。。。。

15 接下去 我要巩固积累,二刷三刷, 学会简要分析时空复杂度,写写自己想出来的test case。

写的比较乱,想到哪里写到哪里,尽量写自己之前比较困惑或者纠结的点 ,记录自己的思考和实践。

最后强调一点就是 面试还是面试,做题还是做题。。。

推荐花花酱的,免费的做的还这么好。有机会,一定要支持下,还有grandyang的。

@jingriver
Copy link
Author

jingriver commented Jan 13, 2020

数据结构与算法总览

算法脑图链接
https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c

数据结构脑图
https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c

Outliers(中文名:《异类:不一样的成功启示录》
如果想要精通一个领域:分为三步走
Chunk it up 切碎知识点
Deliberate Practicing 刻意练习
Feedback 反馈(分为主动式反馈和被动式反馈)

切题四件套:

  1. Clarification (审题)
  2. Possible solution(解题多种可能性)
    a. compare(time/space)
    b.optimal(加强)
  3. Coding(多写)
  4. Test cases(测试)

五步刷题法(五毒神掌)
第一遍:
5分钟:读题+思考(不要超过15分钟)
直接看解法:注意!多解法,比较优劣
背诵、默写好的解法

第二遍:
马上自己写--> LeetCode提交
多种解法比较、体会-->优化!

第三遍:
过了一天后,再重复做题
不同解法的熟练程度-->专项练习

第四遍:
过了一周:反复回来练习相同题目
对于不熟的题目专项练习。

第五遍:
如果有面试,面试前一周进行恢复式训练

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment