一、算法刷题路线总结 经过对网上多方经验的参考,总结出自己的算法刷题路线如下: (1)首先,复习数据结构与算法基础知识,形成完整的算法知识体系,最基本的数据结构,例如链表,队列,栈,二叉树等至少要先熟练掌握; (2)接着刷LeetCode前100题,前100题是最为常见的题目,据说刷算法题0-100题是第一道坎,100-300题是第二道坎,那么度过第一道坎就可以让我们对算法题目有基本的认识,慢慢找到做题的感觉和思路,并拥有一定的做题能力,可以按照链表/二叉树/递归等这些标签来刷; (3)然后就是算法能力提升阶段,要根据专题进行专项训练,掌握不同的解决问题的方法,并能够针对具体类别的问题产生相应的解题思路,可以参考下边专项刷题路线资料分享; (4)最后就是进一步提高阶段,可以采用乱序刷题的方式,可以刷各种面经和高频题,推荐书籍《剑指offer》,这一阶段重在锻炼在面对不同问题的时候,能够选择最为合适的数据结构和算法,进一步加深对于算法的理解,同时拓展常用的算法思想,建立自己的理解。同时学习各种各样的解题技巧和思路,也要学习相关的数学知识。
二、算法题刷题步骤 互联网算法笔试题型介绍:
(1)基本数据结构的考察:这类题我是比较简单的,主要考场基本数据结构的操作,例如二叉树的层序遍历,链表的逆序等,当然,它不会直接告诉你,让你来逆序或者遍历。 (2)某种算法思想的掌握:这类题掌握了某种算法思想,就会比较容易,如果不懂,那就凉凉了。例如动态规划、回溯、枚举、深度/广度、贪心、二分等。其中,动态规划考的挺多,然后就是回溯+深度/广度。 (3)边界条件的考察:这类型的题,估计一看就有思路,知道该怎么做,但是,它的边界条件特别多,需要分很多种情况来讨论,特别容易出错,有时候会让人陷进去,越做越复杂,这类题主要考查思维严谨程度。 (4)找规律、数学公式:这类型的题,主要是根据数据之间的一些关系,来找一些规律,进而推出他们的通用公式,就像我们高中时,找数列的同项一样。 算法题刷题分三大步骤:
(1)分析题目属于哪一类题目,大概用到什么数据结构算法,是数组、链表、图、树?还是用递归动态规划这些方法。常见的算法题目一般只涉及到这几个方面。 (2)验证分析阶段的思路。注意常见错误:变量名写错,边界条件考虑不周。如果调试阶段超过写代码的30%时间,说明思考过程,方案设计很有问题。先反思分析设计方案除了什么错误,思考的不够系统吗?不要一边写,一边改方案,这样效率太低,而且你会逐渐适应低效率的节奏,这个负面影响太大。 (3)作总结,总结很重要。如果没做出来,反思什么阶段犯了错误。如果做出来了,思考解题的关键点是什么,总结题目特点,一定要总结这个题目属于哪一种类型,这个题目在这个类型中特点是什么,和其他这个类型的其他题目区别在哪里。只有经过总结,做过的题目才会真正进入你解题思维的一部分,解题能力的一部分。 刷题时的注意点: (1)一眼就懂思路的题有必要做吗?答案是,有必要做。千万不要眼高手低,看着简单,做起来不一定简单,AC 之后,还要去讨论区看看大佬们是怎么做的,因为有些人的代码,写的很简洁,看着就很舒服,可以多学一学。 (2)尽量最优解。对于很多题,如果不看时间复杂度和空间复杂度,单单只是 AC,那还是很容易的,但是一提交,可能只打败了百分之几的人,显然我们不能只满足于这种代码。当做一道题时,一开始可以先暴力做,但后面还得想想该如何优化,想不出也没事,可以讨论区找空间/时间复杂度更低的代码,或者直接搜索引擎搜索,一般都能搜到别人的代码。之后跟着别人的代码,自己再实现一波,尽可能把最优解的代码实现起来。当你入门之后,更多的是要总结方法,寻找高效率的代码。