初学者在力扣学习算法应该刷哪些题?
首先,大家要明白一个点,那就是我们刷题不是为了去刷题,刷题的目的是为了巩固数据结构与算法,那么也就是说刷题前我们就要学完一遍常见的数据结构与算法。
不管是数组、树、堆等,最终对应在内存中的存储方式只有两种:数组(顺序存储)、链表(链式存储)。
数组由于是紧凑连续存储,可以随机访问,通过索引快速找到对应元素,而且相对节约存储空间。但正因为连续存储,内存空间必须一次性分配够,所以数组如果要扩容,需要重新分配一块更大的空间,再把数据全部复制过去,时间复杂度 O(N); 而且如果想在数组中间进行插入和删除,每次必须搬移后面的所有数据以保持连续,时间复杂度 O(N)。
链表因为元素不连续,而是靠指针指向下一个元素的位置,所以不存在数组的扩容问题;如果知道某一元素的前驱和后驱,操作指针即可删除该元素或者插入新元素,时间复杂度 O(1)。但是正因为存储空间不连续,你无法根据一个索引算出对应元素的地址,所以不能随机访问;而且由于每个元素必须存储指向前后元素位置的指针,会消耗相对更多的储存空间。
刷题之前,我们需要知道怎么去刷,按什么顺序刷题,应该根据需求来:
如果是为了拿大厂 offer,那么在力扣上刷够大概 200 道经典题,注意不是重复刷简单题,是分门别类的刷;
如果是想长期系统的学习算法,提升自己的学科素养,建议按类型刷题,分门别类的学习、总结,有针对性的提升;
在最初的阶段,算法世界的大门刚刚打开,这个时候迷茫是正常的,解决迷茫的要诀在于少想多做,勇往直前。
首先可去了解下《算法导论》或者是站内的 👉 《一本吃透数据结构》这些书籍可以算是初学者开启算法大门的第一步,着重在于开阔算法视野。
入门阶段花费时间因人而异,大约在 3~6 月之间,将上述提到的书籍选择其中一本看完基本就能入门了。在这个阶段中,需要了解几类常用的算法:
1. 常用的数据结构:数组、字符串、链表、树(如二叉树)等
2. 常用的算法:分治、贪心、穷举、动态规划、回溯、二分算法、深度优先搜索等
没有概念的可以看下图:
其中,暴力枚举、贪心算法容易理解,可以很快上手。数论相关的算法需要用到一些数学技巧,包括位运算、幂函数、求模等等性质。二分算法和深度优先搜索算法相对有些技巧性,好在他们都有固定的模板。另外,不得不提的是,深度优先搜索算法的思想非常重要,而且深度优先搜索是动态规划、分治和回溯的基础,需要重点掌握。
在此过程中,可以辅以力扣中的简单题目,它们往往都代表了一类经典算法。
例如:
动态规划 算法的经典题目,通过此题目可以了解状态、边界条件、状态转移方程等基本概念。
深度优先算法 的入门题目,递归实现和迭代实现都不难,可以学习到深度优先算法的层层嵌套搜索、找到答案或到达边界停止的基本解题思路。
二分算法 的典型题目,使用二分算法的解题模板可以轻松解决,二分算法的算法思想清晰明确,一通百通。
👉 169.多数元素
分治算法 的简单题目,如果我们知道数组左边一半和右边一半的众数,我们就可以用线性时间知道全局的众数是哪个。这道题妙就妙在可以有多种解题方式,让初学者至少可以写出暴力枚举算法 AC 题目,然后再逐步深入,优化算法。
这是一道 贪心算法 的简单题目,贪心算法理解简单,上手容易,适合作为初学者掌握的第一个算法。
学习算法讲究融汇贯通,需要和理论结合,如同阅读了一本武功秘籍,心法和事件是两码事。
实战练习非常重要,不经过实战练习,理论仅仅是纸上谈兵。比如,不经过大量练习,永远不会知道二分算法是多么容易出现死循环。一个边界条件控制不好,程序就会显示无情的 "Time Limit Exceeded"。在 20 分钟的调试后,或许仅仅是将 while (left <= right) 改为了 while (left < right) 。程序员说到底也是手艺人,这一个字符的改动,正是 "台上一分钟,台下十年功" 的体现,需要在大量的练习中才能理解两者之间的不同作用。
再比如,动态规划算法中,递归的函数就像是《盗梦空间》中的"梦中梦",一层套一层,又渐次展开,很难整体把控。在不断的练习后,才会知道,动态规划算法的重点是抓住动态转移方程,只处理两个状态之间的过渡和边界条件,慢慢"大事化小,小事化了"。
这一阶段的时间将会非常漫长,伴随着不断地摔倒、爬起,你会对每类算法逐渐融会贯通。好在这个阶段不看天赋只看勤奋,每次从坑里爬起,都是献给成长的一份力量。
推荐的进阶书籍有 👉《动态规划图文学》,本书适合有基本的数据结构与算法基础的学习者或者想要进一步提升算法与数据结构解题能力及实际应用能力的学习者。能够让大家补充掌握两种线性动态规划问题且熟悉树形动态规划、图上动态规划、概率动态规划与博弈动态规划的类型概念与解题思路。
下次我们将讲解哪些题适合进阶的题解经典题。评论留言少 BUG !点赞转发不脱发!
BY /
本文作者:力扣
编辑&版式:Janson
声明:本文归“力扣”版权所有,如需转载请联系。
点个在看,少个 bug
微信扫码关注该文公众号作者