What is it ?💎
这里主要记录我做算法\数据结构题的的解题方案及一些笔记
预备
0.为什么刷题?💡
基础不扎实 => 自身能力提升 细化为以下三点:
- 保持思维敏捷。非常重要,状态好才能保持对编程的热情
- 对基础的数据结构、查找和排序保持熟练。能解决日常开发中的性能相关问题
- 积累对问题域的探索。只有对问题域有足够的探索,才可能举一反三,迸发灵感。
其次关于面向面试的刷题:
每一个想找程序员工作的应届生,都躲不开两个字“刷题”。计算机发展到现在,暂时的确没有比“算法题”更好的方法,去检验校招生的能力。但是手写算法的主要目的,不是你会不会这道题。而是要考察以下两点:(建议每次面试前,都拿出来读两遍)
- 考察面试者的计算机基础知识、对编程语言的理解程度、代码习惯等专业素质
- 讨论题目的过程中,检验面试者的思维是否敏捷、沟通方式是否恰当、如何分析未知问题等;
所以,面试的时候,千万忌讳背题。写算法题的过程主要展示的是,面试者如何思考,尤其是遇到未知问题如何解决
不要为了刷题而刷题,题不在多掌握则灵。
1.怎么有效地做算法题? 🤔
原文:如何有效地写算法题
严格使用番茄
番茄时钟有两个重点,一是通过长期的训练,让大脑习惯在一段时间内保持高效。二是通过要求每次在开始前有规划和每次结束后有总结,保障产出
- 用一个番茄时钟对题目进行彻底的分析
- 执行时的番茄时钟
- 当分析完之后,建议不要开始写代码,高效地验证分析阶段的思路
- 执行高效,依赖于良好的编码习惯
- 不要犯小错误,要始终朝着只要想清楚了,一次写好,不要调试的状态要求自己
- 若编码过程状态不够好,应该加长休息时间,或者干脆结束掉,不要给自己留下低效的印象
- 任一番茄时钟结束时
- 一定要做总结!
- 没有解出题来,没有思路情况
- 结束时总结犯了什么错误
- 解出来的情况
- 总结题目的特点,题目中哪些要素是解出该题的关键。不做总结的话,花掉的时间所得到的收获通常只有 50% 左右。
- 总结此题最后是归纳到哪种类型中,它在这种类型中的独特之处是什么.做好总结,让每道题都有最大的收获。一个月之后自己的状态应该会有很大变化。
2.反思&总结 📘 ✏
接下来我们从技术面试官侧重考察的素质来规划下更好更优的反思总结方案。
- 扎实的基础知识
- 高质量的代码
- 分析问题时思路清晰
- 优化空间和时间效率
不仅仅记录每道题的我的解法及更优解法,还会力求做到知识的归纳与反思。毕竟题是永远也刷不完的。
总结主要从以下几个方面思考:
- 1.哪些是相似的题,相似点在哪里而又变了什么,相应解法有什么改变
- 能否总结,以便下次遇到类似问题直接将解决此类问题的思路迁移过去稍作改变[知识迁移能力]
- 2.多思路多方案多途径地解决问题[发散思维]
- 一题多解--效率更高、算法更精巧、
- 不走寻常路的解法,奇淫技巧
- 3.接地气的问题--总结他的抽象过程[抽象建模能力]
- 需要自己建模确定使用哪种数据结构的题
3.分享备忘:📝
解题分享重要的不是答案,或者更精妙的解法,最后的标准解法和思路在discussion中都有,对他人有用的分享不是结果,而是:
- 你在番茄时钟中是如何规划的,也就是番茄时钟的目标。
- 你是如何分析,也就是思路。
- 你的结论是什么,或者是你在执行时除了什么问题。
- 你所总结出的题目的关键部分。也就是对问题域进行探索的经验
关于熟练度: 因为我有就业的压力,所以对于题不仅仅是会做那么简单,我还要掌握到熟练的程度即刷过的题不要白刷了。
- 尽量二刷
- 如果二刷还不能一下反应出思路的,继续强化,甚至白纸写代码。