Last active
February 19, 2022 21:38
-
-
Save jingriver/4a16c7eaa4eb6e1eab5bb91abed221ad to your computer and use it in GitHub Desktop.
leetcode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/ |
数据结构与算法总览
算法脑图链接
https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c
数据结构脑图
https://naotu.baidu.com/file/b832f043e2ead159d584cca4efb19703?token=7a6a56eb2630548c
Outliers(中文名:《异类:不一样的成功启示录》
如果想要精通一个领域:分为三步走
Chunk it up 切碎知识点
Deliberate Practicing 刻意练习
Feedback 反馈(分为主动式反馈和被动式反馈)
切题四件套:
- Clarification (审题)
- Possible solution(解题多种可能性)
a. compare(time/space)
b.optimal(加强) - Coding(多写)
- Test cases(测试)
五步刷题法(五毒神掌)
第一遍:
5分钟:读题+思考(不要超过15分钟)
直接看解法:注意!多解法,比较优劣
背诵、默写好的解法
第二遍:
马上自己写--> LeetCode提交
多种解法比较、体会-->优化!
第三遍:
过了一天后,再重复做题
不同解法的熟练程度-->专项练习
第四遍:
过了一周:反复回来练习相同题目
对于不熟的题目专项练习。
第五遍:
如果有面试,面试前一周进行恢复式训练
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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的。