写在前面

本文主要是给博主记录一个刷leetcode的方法,主要是参考大佬[全栈潇晨](搞定大厂算法面试之leetcode精讲 (xiaochen1024.com))的方式来进行学习,放在博客上方便参考,也希望能够帮助到每一个热爱前端的老铁。

如何刷题

切碎知识点

对每个类型的题目形成一套解题思路和模板,比如解动态规划的步骤有:

  • 根据重叠子问题定义状态
  • 寻找最优子结构推导状态转移方程
  • 确定dp初始状态
  • 确定输出值

刻意练习

要练习缺陷的、弱的地方,那些写起来不舒服、不爽、枯燥的题目就是薄弱点,不要只练习熟悉类型的题

反馈

leetcode上寻找别人的解题思路,包括评论区的讨论,还有程序的运行时间和占用内存的数据,顺便提一句,leetcode的运行时间和占用内存情况的数据不准确,就当个参考就好,不要太在意运行时间的排名。

多写

反复练习,加强记忆,三分学,七分练。

总结规律

将刷题的套路总结成自己方法,比如拆解问题、找基本的子问题、问题的组装、数学归纳等等。最后这些方法落实到代码层面无非是if else,for while、递归等,总结了这些规律,才能在题目变化的时候还能找到正确的解题路径。题目做多了也会有相应的感觉,有时从题目要求中也能明显的感觉到该用什么算法,比如题中提到了用O(logn)的复杂度来解,那很有可能要用到二分法,提到了O(nlogn),那可能是用归并或者快排的思想解题。

面试时如何做一道题

明确题意

有不清楚的地方要和面试官明确题目的意思,包括程序的特殊数据输入,数据量,边界条件的处理等等。

可能的解

要尽可能的列出你知道的方法,对比他们的优劣势,选择你认为最好的方法进行编码。不要小看暴力解法,它往往是题目思考和优化的起点。

写完之后进行复杂度分析

包括时间和空间复杂度分析。

面试官往往是考察思考和解决问题的方式,我们要尽量的让面试官看到我们思考的路径和过程,即使最后的运行结果不太正确,也不一定会影响最后的录用,可能也就是因为某个条件或者返回值出现了问题。

在面试的过程中,如果完全没有思路,也可以向面试官寻求提示和帮助,人无完人,就算是在平时的工作中我们也会遇到困难,这不丢人,积极寻找帮助也是推进项目前进的方式,没有问题有时候才是最大的问题。如果确定这道题是你完全没有遇到过的,可以要求面试官更换一道题,与其浪费时间思考,不如直接换一道,也许换了之后就是熟悉的题目了,知识点和题目这么多,每个人都有自己的知识盲区。不要想着面试官是监考的老师,而是未来的同事,面试不是考试,大多数题都没有标准答案,有时候只要表现的比其他候选人更好一点就可以了。