目录
一、力扣是什么?
1.1 概念
1.2 为什么要刷LeetCode题
1.3 LeetCode与其他OJ的异同点
二、LeetCode新手入门
2.1 LeetCode 注册
2.2 LeetCode 题库
2.2.1 题目标签
2.2.2 题目列表
2.2.3 当前进度
2.2.4 题目详情
2.3 LeetCode 刷题语言
2.4 LeetCode 刷题流程
2.5 力扣第一题
三、LeetCode 刷题攻略
3.1 LeetCode 前期准备
3.2 就业必刷题
3.2.1 剑指Offer
3.2.2 力扣 HOT 100 | 力扣前 200
3.3 LeetCode 刷题顺序
3.4 LeetCode 刷题技巧
3.4.1 三个为什么?
3.4.2 十五分钟思考法
3.4.3 重复刷题
3.4.4 拿到一道题的处理流程
3.4.5 按专题分类刷题
3.5 撰写刷题博客
3.5.1 如何撰写刷题博客
四、刷题方式
4.1 制定计划
4.2 分类题目
4.3 开始刷题
4.4 回顾总结
五、总结
算法考察是当今互联网大厂面试的重点内容,不管是面试开始前的笔试环节,还是在每轮面试中的手撕环节,都对面试结果有着决定性作用。良好的算法思维,不仅有助于更容易通过面试,还对日常的编程有着良好的指引,因此,练好算法题至关重要。然后,面对题量庞大的LeetCode题库,找到合适的刷题方向非常重要,如何紧跟面试考察重点,针对性地分类别训练算法题型,便是本文考察的重点。工欲善其事必先利其器,接下来,认真听讲啦!目前的Leetcode考察,主要从算法和数据结构两方面进行考察,首先梳理一下常考的数据结构和算法思想。
一、力扣是什么?
1.1 概念
LeetCode是一个代码在线评测平台(Online Judge),包含了 算法、数据库、Shell、多线程 等不同分类的题目,其中以算法题目为主。我们可以通过解决 LeetCode 题库中的问题来练习编程技能,以及提高算法能力。LeetCode 上有 2300+ 道的编程问题,支持 16+ 种编程语言(C、C++、Java、Python 等),还有一个活跃的社区,可以用于分享技术话题、职业经历、题目交流等。
1.2 为什么要刷LeetCode题
许多知名互联网公司在面试的时候喜欢考察 LeetCode 题目,通常会以手写代码的形式出现。需要面试者对给定问题进行分析并给出解答,有时还会要求面试者分析算法的时间复杂度和空间复杂度,以及算法思路。面试官通过考察面试者对常用算法的熟悉程度和实现能力来确定面试者解决问题的思维能力水平。
无论是面试国内还是国外的知名互联网公司,通过 LeetCode 刷题,充分准备好算法,对拿到一个好公司的好 offer 都是有帮助的。
1.3 LeetCode与其他OJ的异同点
LeetCode的编程思路,通俗来讲,是服务器端进行数据的输入,通过所写方法(在C语言中,是一个函数)的处理,返回相应的输出值。程序猿要做的工作是写一个方法/函数,进行题目要求的处理。
而传统的OJ的编程思路,是对整个编程文件的运行检查,输入一个数表,通过整个程序的处理,输出一个数表或数字。
LeetCode这种接口型的思路,类似于一个超大型项目的实现。一个App不可能只有一个源文件,所以由服务器端进行参数的传递,在程序中,各个类/方法/函数各司其职,进行数据的处理和再传递。所以,LeetCode是不需要数据输入的方法/函数的,输出也不需要输出方法/函数,而且不需要import包,也不需要include头文件,这些都是服务器端给你准备好了的。你只需要写一个方法/函数,进行数据的处理,将处理结果返回(return)即可。
二、LeetCode新手入门
2.1 LeetCode 注册
- 打开 LeetCode 中文主页,进入力扣官网:LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台
- 输入手机号,获取验证码。
- 输入验证码之后,点击「登录 / 注册」,就注册好了
2.2 LeetCode 题库
[题库](题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台)是 LeetCode 上最直接的练习入口,在这里可以根据题目的标签、难度、状态进行刷题。也可以点击「随机一题」开始刷题。
2.2.1 题目标签
LeetCode 的题目涉及了许多算法和数据结构。有贪心,搜索,动态规划,链表,二叉树,哈希表等等,可以通过选择对应标签进行专项刷题,同时也可以看到对应专题的完成度情况。
2.2.2 题目列表
LeetCode 提供了题目的搜索过滤功能。可以筛选相关题单、不同难易程度、题目完成状态、不同标签的题目。还可以根据题目编号、题解数目、通过率、难度、出现频率等进行排序。
2.2.3 当前进度
当前进度提供了一个直观的进度展示。在这里可以看到自己的练习概况。进度会自动展现当前的做题情况。也可以点击【进度设置】创建新的进度,在这里还可以修改、删除相关的进度。
2.2.4 题目详情
从相关题目的链接点击进去,就可以看到这道题目的内容描述和代码编辑器。在这里还可以查看相关的题解和自己的提交记录。
2.3 LeetCode 刷题语言
大厂在面试算法的时候考察的是基本功,用什么语言没有什么限制,也不会影响成绩。日常刷题建议使用自己熟悉的语言,或者语法简洁的语言刷题。相对于
Java
、Python
而言,C
、C++
相关的语法比较复杂,在做题的时候一方面需要思考思路,另一方面还要研究语法。并且复杂的语法也不利于看懂思路,耗费时间较多,不利于刷题效率。在面试的时候往往需要一个小时内尽可能的完成更多的题目,C++
一旦语法出错很容易慌乱。当然 LeetCode 周赛的大神更偏向于使用C++
刷题,这是因为用C++
参加算法竞赛已经成为传统了,绝大多数的OI / ACM
竞赛选手都是C++
大神。此外,根据自己以后的求职意向,选择合适的编程语言进行刷题,我选择C、C++。
2.4 LeetCode 刷题流程
在「2.2 LeetCode 题库 —— 2.2.4 题目详情」中我们介绍了题目的相关情况。
可以看到左侧区域为题目内容描述区域,在这里可以看到题目的内容描述和一些示例数据。而右侧是代码编辑区域,代码编辑区域里边默认显示了待实现的方法(函数名和参数、返回值的设计)。我们需要在代码编辑器中根据方法给定的参数实现对应的算法,并返回题目要求的结果。然后还要经过「执行代码」测试结果,点击「提交」后,显示执行结果为 「通过」 时,才算完成一道题目。
总结一下我们的刷题流程为:
- 在 LeetCode 题库中选择一道自己想要解决的题目。
- 查看题目左侧的题目描述,理解题目要求。
- 思考解决思路,并在右侧代码编辑区域实现对应的方法,并返回题目要求的结果。
- 如果实在想不出解决思路,可以查看题目相关的题解,努力理解他人的解题思路和代码。
- 点击「执行代码」按钮测试结果。
- 如果输出结果与预期结果不符,则回到第 3 步重新思考解决思路,并改写代码。
- 如果输出结果与预期符合,则点击「提交」按钮。
- 如果执行结果显示「编译出错」、「解答错误」、「执行出错」、「超出时间限制」、「超出内存限制」等情况,则需要回到第 3 步重新思考解决思路,或者思考特殊数据,并改写代码。
- 如果执行结果显示「通过」,恭喜你通过了这道题目。
接下来我们将通过「两数之和」这道题目来讲解如何在 LeetCode 上刷题。
2.5 力扣第一题
2.5.1 题目链接及界面
1. 两数之和 - 力扣(LeetCode)
2.5.2 题目大意
- 描述:给定一个整数数组
nums
和一个整数目标值target
。- 要求:在该数组中找出和为
target
的两个整数,并输出这两个整数的下标。
2.5.3 解题思路
思路一:暴力搜索:最简单的思路是遍历数组,对于数组中每一个数
nums[i]
,寻找数组中是否存在target - nums[i]
。但是这样利用了两重循环暴力搜素,时间复杂度为 𝑂(𝑛2),虽然能解决问题,但是还有更好的解决思路。思路二:哈希表:字典中键值对信息为
target-nums[i] :i
。i
为下标。遍历数组,对于每一个数nums[i]
,先查找字典中是否存在target - nums[i]
,存在则输出target -nums[i]
对应的下标和当前数组的下标i
。没有则在字典中存入target-nums[i]
的下标i
。
2.5.4 解题代码
思路一:暴力搜索
思路二:哈希表
理解了上面这道题的题意,就可以试着自己编写代码,并尝试提交通过。如果提交结果显示「通过」,那么恭喜你完成了 LeetCode 上的第一题。虽然只是一道题,但这意味着刷题计划的开始!希望你能坚持下去,得到应有的收获。
三、LeetCode 刷题攻略
3.1 LeetCode 前期准备
刷 LeetCode 之前最好有一些「数据结构」和「算法」类的基础知识储备。这些基础包括:
- 常考的数据结构:数组、字符串、链表、树(如二叉树) 等。
- 常考的算法:分治算法、贪心算法、穷举算法、回溯算法、动态规划 等。
3.2 就业必刷题
3.2.1 剑指Offer
剑指 offer 的优先级还是很高的,就业必刷。推荐大家在力扣上刷,力扣上的测试数据相对较多,在大部分情况,你过了代码基本上就没有什么逻辑漏洞了。
剑指 offer 名气大,是因为剑指 offer 的题目是真的经典!短短 66 道题,内容覆盖常见数据结构比如链表、二叉树、图、队列、栈、哈希表等等,常见的算法和经典问题包括二分、动态规划、全排列问题、滑动窗口、贪心、分治、排序、位运算、dfs、bfs 等等,刷完这些题,是真的可以收获和学到很多!
另外推荐刷剑指 offer 的原因是因为剑指 offer 在面试笔试中出现是真的 非常高频 ,面试官考察的题目一般都是经典题,面试官不创造题目,只从题库中抽选题目,而抽选题目的来源基本就是力扣和剑指 offer,剑指 offer 是非常高频的题库之一。
3.2.2 力扣 HOT 100 | 力扣前 200
优先推荐 力扣 HOT 100,力扣 HOT 100 是对力扣某一时间(因为力扣题一直在增加)题库选出的 100 道优质题,这些题跟剑指 offer 类似,都是一些高频问题,有些题和剑指 offer 重叠,也有不少问题确实还是有难度的,对很多人来说特别容易卡壳,难题可以放一放后面再做。但是如果力扣 HOT 100 能刷完,那你其实加上剑指 offer 快 200 的题量就挺可观的了。
力扣目前已经有两三千道题目,并且还在增加,所以想刷完力扣,几乎是不太可能的,如果想顺序刷,还是推荐前 200,力扣前 200 和力扣 HOT 100 重合很大,前两百质量还是很高的(不是说后面质量不高,只是那么大题库刷到后面就会出现很多同类型、同套路的题目),所以还是推荐先刷完力扣前 200 的。
刷完这几个部分大概能够拥有接近 300 高质量题的刷题量,我觉得应对大部分的互联网公司面试是足够了,出一些变换自己也能够相对容易的看出来。
3.3 LeetCode 刷题顺序
上面列举了待刷的题库,既然知道了要刷哪些题,有没有一个比较推荐的刷题顺序呢?是否需要分类刷?是否要分专题分类我感觉这个看人的。
如果你有数据结构与算法基础,比如考研或者平时数据结构学的还不错,常见数据结构与算法原理明白能够实现部分,又或者有部分刷题经验,那么我推荐你直接顺序着刷就完了。从客观来说,力扣和剑指 offer 上面的题目有难题,也有需要高级数据结构的,但更多的是在 数据结构或者逻辑基础上的巧妙思维题型更多,如果你有数据结构与算法的基础,你还是比较容易 get 到考察点的。顺序刷的途中遇到某个不会的技巧或者数据结构,学习一下加入自己的「脑库」中即可。如果你是真的小白,那你就要为自己手动找到一条可行走的路,那我推荐你可以按照一些专题去各个击破。因为你是小白如果顺序刷这个题不会,学了,再刷下一题,又学了个完全陌生的新东西,短期内学习太多比较陌生的新东西很难吸收,很容易忘,就会陷入怎么都学不会的苦恼中。所以你可以把刷题当成一个台阶,一层一层往上爬,刚开始找 easy easy 那种 a+b 类型的题求过,后面慢慢增加难度(很多数据结构或者算法技巧相对独立,每个人觉得难的不一样这里就不列举了)。
对于数据结构方面的题,从链表开始先学透单链表、双链表、循环链表各种插入删除实现,然后在题库中找链表相关题进行逐个攻破(链表中的也可细分链表插入、删除、反转、合并、查找、排序等等),链表大专题之后二叉树大专题、哈希…… 这样你短期内学习某一个数据结构或者算法技巧,多去刷题巩固吸收效果比较好!在这种情况切勿觉得简单就草草下一个,你不敲代码,可能不会知道自己会出现什么问题。
讲个笑话,从前有个人以为 LeetCode 的题目是按照难易程度排序的,所以他从「1.两数之和」 开始刷题,结果他卡在了 「4.寻找两个正序数组的中位数」这道困难题上。
LeetCode 的题目序号并不是按照难易程度进行排序的,所以除非硬核人士,不建议按照序号顺序刷题。
推荐刷题顺序:如果是新手刷题的话,推荐先从「简单」难度等级的算法题开始刷题。等简单题上手熟练之后,再开始按照标签类别,刷中等难度的题。中等难度的题刷差不多之后,可以考虑刷面试题或者难题。
3.4 LeetCode 刷题技巧
3.4.1 三个为什么?
1.为什么见到一个题没思路?
这种情况大概率是因为见少了,刷题也是个缓慢的过程,见得多刷的多些,来的感觉才能更快一些。还有一部分可能因为给自己安排的刷题路线不够平和。你上来去肝 hard 难度的没思路不是很正常。
2.简单题很容易懂实现起来很难?
这种情况可能基础逻辑可能缺乏训练,对编程语言的集合框架掌握也有所欠缺。有些题可能涉及到集合框架(Map、Set、List、Stack、Queen)各种嵌套、联立需要你有个清晰的层次感和逻辑。
你刷题,需要熟练使用一门编程语言,熟悉这个编程语言的常见操作 api、集合框架、函数,这些是解决问题的工具帮助我们提高效率(不至于每次手写个队列、手写个哈希表吧)。这个问题推荐可以先刷几道简单的字符串处理问题,字符串处理问题很多涉及到的集合框架和逻辑控制比较多。
3.看了很多题解为啥还是不会刷题?
看了很多题没刷那跟没刷区别不太大,印象微弱。从学习角度,刷题和我们学数学的方式有点相似,学会了数学题公式和例题,但还需要大量练习才能真正掌握。
只有自己亲身敲了每一行代码,每一行代码逻辑是什么,是自己思考出来的而不是看懂别人的思考。从 0 到 1 完整实现整个程序,这才能形成一个完整逻辑,然后可能出现各种 bug 自己调试看看找出问题。
可以看题解,看了自己要能完全写出来才行,如果刷了 1000+题,你看了题解不刷没问题,看个思路过了被卡的地方就行。但如果刷了 100 不到,那你看懂还是老老实实按照别人的逻辑闭卷式的复现一遍。不去实现说有很多问题,记不住,也没啥奇怪的。
总结一下,如果刷题量不到 100 感觉状态不行就简单粗暴多刷题先,如果刷了两三百状态还是很差那么就要好好找一下其他原因。
3.4.2 十五分钟思考法
「十五分钟思考法」 的意思是:如果一道题如果 15分钟之内有思路,就立即动手解题。如果 15分钟之后还没有思路,就直接去看题解。然后根据题解的思路,自己去实现代码。如果发现自己看了题解也无法实现代码,就认真阅读题解的代码,并理解代码的逻辑。
刷题其实跟英语里边的背单词过程是类似的。
一开始,先学简单的单词,掌握了基本词汇之后,再学习词组,学习句子,然后再看文章。而且,背单词的时候也不是背一遍就会了。而是不断的重复记忆。
算法刷题也是一样,零基础刷题的时候,不要过分纠结怎么自己就想不出来算法的解法,怎么就想不到更加高效的方法。学英语的时候,不也是从第一个字母开始学起的嘛。
一开始的时候,不会做的题就去看题解,尽可能的快速入门。
3.4.3 重复刷题
算法题有时候一遍刷过去,过的时间长了可能就忘了,看到之前做的题不能够立马想到解题思路。这其实还是跟背单词一样,单词也不是看一遍就完全记住了。所以题目刷完一遍并不是结束了,还需要不断的回顾。而且,一道题目可能有多种解法,还可能有复杂度更低的算法思路。最开始做的时候,可能是一种思路,再做第二遍的时候,可能会想到了新的解法,新的优化方式等等。所以,算法题一遍之后遇见不会的,还可以多刷几遍,不断加深理解。
3.4.4 拿到一道题的处理流程
1.确定考察点、确定思路
和做数学题一样,读到一个题,读完题意后首先就是要了解这个题到底考察的内容是什么?当然如果你按照专题来刷,那可能这方面就容易很多。首先可以确定下题型大类型,是图论的,还是二叉树,还是字符串的?就要拿这个类型的题目往这个范畴常见算法上靠。比如给个数组数据让你查找计算,有可能是双指针,有可能是哈希,有可能还是位运算,还可能是动态规划,还可能是要贪心处理。不过大部分题是在各个经典算法的经典问题上进行一些变化,要知道经典算法处理的哪些经典问题。如果能确定考察点,可以想想细节开始实现;如果确定不了考察点,没思路,先别直接看题解,看看题目 标签 的提示。有时你看一个题可能说:这题啥方法啊我只会暴搜,有的确实就是搜索剪枝……
除了标签,还要看 数据范围!数据范围内的数据都是可能出现的,不同数据范围可能使用方法不同(这点数组题较多,有些题巧用哈希、原地置换对数据有要求)。如果自己看了标签想想来灵感那最好,如果还是没有灵感,那点一下题解。可以从标签标题中看看能不能有灵感,有不少题解会给足够多的暗示有些人看到就能明白了。
如果还是不会那就老老实实点进去看看别人的思路,有的是视频,有的是图文,看懂为止,要是还自己看不懂,那就请教一下别人吧!
2.编写代码、测试
编写代码的过程不要有任何参考!编写代码的过程不要有任何参考!重要的话说两遍,思路可以看,别人的代码也可以看,你自己写代码不要参考和 ctrl c + ctrl v,工程项目能跑起来就行为了效率都是 cv 大法,但是面试笔试题基本要你闭卷,有的还要你用在线 IDE 连提示都不全的。
写代码常常要考虑常见问题:测试数据边界(比如Integer.MAX_VALUE,Integer.MIN_VALUE 这种边界数值),循环控制边界处理,末尾数据处理(有时候会被遗忘处理),特殊异常情况考虑,数值范围是否合理,算法复杂度是否能够跑出来,数据深浅拷贝,简化重复遍历和操作,变量命名清晰,注释较为完整……写完代码,用测试案例多测测,确保万无一失。力扣经常出空值测试案例,因为这个 wa 了很多次……如果出现和想象中不一样的问题,先看一遍自己代码逻辑看看能否看出问题,如果看得出正好,看不出的话自己打印输出或者 debug 找找问题,直到改对为止,有很多题需要考虑比较全才能 ac。
3.方法、结果对比
不要以为 ac 了就完了,你要看看自己时间上超越了多少人,推荐从这两个维度来衡量自己的代码:要超越 70% 以上的人(根据自己要求适当提高):大部分题超越 70% 说明你的方法上是没问题的,可能有些小的方面可以进行优化。比如 StringBuilder 替代 String 进行字符串拼接,使用 char[] 数组替代 String 进行遍历枚举等等。自己的方法在好方法时间范围内:有些题比较卷,大家都是最快方法你的代码可能比别人差 1ms 就显得很慢,这时你只要确定你的方法很优秀就可以不一定要追求 100%,并且这个时间花销不同评测姬出来结果可能也不同的。可以看看大家的时间花销区间,如果你的方法跟最快的在几 ms 或者 30% 时间范围,其实都是 ok 的。别人 4ms,你 5ms 没啥问题,别人 50ms,你 70ms 也没啥问题,但是如果别人 80ms 你 800ms 那差的太多就要看看自己逻辑和代码了。
另外,力扣你点击前面时间的柱状图是可以看到别人时间开销较小的代码(有的现在跑可能因为测试数据变动没那么快了),可以参考学习一下别人的处理方式。
4. 巩固提高
过了这道题,可以看看题解区别人有没有更巧妙的处理方法,当你自己 ac 之后和别人有个直接对比印象会比较深刻:还可以这样!力扣上 hard 题一般逻辑量大或者难,easy 和 mid 可能简单,但有些题目后面反问你能用 O(1),O(n) 等等限制条件解决的还是很需要技巧性的,有必要掌握!如果感觉这类题型掌握不扎实还想再练一下可以看相似题型去及时巩固一下。
上面的一些方法仅限于给一些初学者建议,可以参考。如果上面题差不多有闲余之力,推荐可以跟着力扣每日一题打卡,半年就是 180+题量,一年就是 365 题量,相当可观。
方法和路线不是最难的,最难的是坚持,希望和大家一起在后面的路上不变秃但是变强!
3.4.5 按专题分类刷题
第一遍按照难易程度刷完后,第二遍可以按照专题分类进行刷题,这样可以巩固知识点,加深对第一遍刷题的理解。这里简单分类:
一、数组篇
数组是一种基础数据结构,可以用来处理常见的排序和二分搜索问题,典型的处理技巧包括对撞指针、滑动窗口等。 面试中的算法问题,有很多并不需要复杂的数据结构支撑,就是用数组,就能考察出很多东西。
二、字符串篇
三、链表篇
四、二叉树篇
3.5 撰写刷题博客
3.5.1 如何撰写刷题博客
刷算法题,有一个十分有用的捷径,就是「写博客」。如果你刷完一道题,能把这道题的解题步骤,做题思路用通俗易懂的话写成博客,那么这道题就算是掌握了。其实就相当于「费曼学习法」的思维。这样,也可以减少刷题的遍数,遇到之前刷过的题,但一时之间没有思路的,可以看看自己之前的解题报告。这样就节省了大量重复刷题的时间。那么该如何撰写呢?
第一部分:题目分析介绍
简单介绍题目的实现要求及时间复杂度和空间复杂度要求;可以以截图形式展现更加直观
第二部分:编码思路分析
对题目分析,阐述自己的解题思路,可以写上多种解法思路,拓展思路。
第三部分:配上实现图解
对于复杂题目配上图片展示,更加直观,清晰,易于复习。
第四部分:具体代码实现
编写具体的实现代码。
四、刷题方式
4.1 制定计划
首先,需要明确学习目标和时间安排。确定每天或每周的算法练习时间,并将其纳入你的日程表或计划中。确保合理分配时间,避免过度负荷或过于松散。
如果时间较为充裕,建议将上图所提到的每个类别的题目进行针对性训练,在刷题前学习指定分类的理论知识,在刷题过程中不断尝试,刷题后仔细查看题解记录笔记,定期总结,力图将每个类别的题型吃透。
如果时间紧张,则建议按照近年的互联网公司考率安排刷题工作。
4.2 分类题目
根据本文提到的算法分类,我们可以将刷题内容按照不同的算法类别进行组织,这样能够更好地学习和解决特定类型的问题。然而,在开始刷题之前,有几个关键点需要优先考虑和学习。
首先,我们需要掌握与特定数据结构相关的基础知识。了解数据结构的原理、特性和常见操作是非常重要的。例如,如果要刷二叉树相关的题目,就需要了解二叉树的定义、遍历方法以及常见的操作,如插入、删除和搜索。
其次,确保自己能够用熟悉的编程语言来实现各种针对特定数据结构的操作。熟悉所选择的编程语言,并具备在该语言中编写代码的能力,对于解决刷题问题至关重要。无论是使用 Python、Java 还是其他编程语言,都要熟悉其基本语法和常用的编码技巧。
一旦掌握了这些基础知识和技能,我们可以着手扩展刷题内容。按照算法分类,例如动态规划、贪心算法、回溯算法等,可以选择一个分类并集中精力解决属于该类别的问题。这种方式有助于更好地组织学习内容,避免在不同类型的题目之间跳来跳去。同时,专注于一种算法类别可以提高自己在该类别下解决问题的能力和熟练度。
因此,在刷特定算法分类的题目之前,确保你已经掌握了相关数据结构的基础知识,并能够用熟悉的编程语言编写相应的代码。这样能够更好地组织学习内容并集中精力解决特定类型的问题,从而提升自己在算法和数据结构上的能力。
4.3 开始刷题
在解决刷题问题时,首先应该尝试自己思考并使用暴力法求解。通过最直接的方式来解决问题可以帮助我们更好地理解题目和算法的基本原理。然后,我们可以寻找优化的可能性,并对代码进行改进。在进行优化后,需要进行验证,确保优化的方法是有效的,并能正确解决问题。此外,要特别注意代码的严谨性,处理各种特殊情况和边界条件。
然而,如果超过15分钟后依然没有思路,就不要过度纠结于这个问题上。及时查看其他人的题解是一个更好的选择,从中学习他们的思路并尝试自己编写代码。同时整理笔记,记录自己的学习过程和所掌握的知识点。无论最终是否成功解决问题,在首次刷题时都应查看高赞题解,以检验自己的思路是否有问题,并从中学习新的见解。
完成一道题目后,可以在近期的刷题计划中选择类似的题目来加深对该类题型的理解。这样做可以进一步提升自己在相关算法和数据结构上的能力,并加强对各种解题方法的理解和应用。
总之,刷题过程中应先尝试自己思考并使用暴力法解决问题,然后优化代码并验证结果。如果遇到困难,要及时参考高质量的题解,并记录学习博客。完成一道题目后,可以据此规划刷题计划,并选择类似类型的题目进行练习,以提升自己的理解和应用能力。
4.4 回顾总结
在刷算法题的过程中进行总结是非常重要的,它可以帮助你梳理思路、加深理解、记录学习成果,并提升解题能力。下面是一个结合之前提到的周期的总结方法:
- 每天回顾:在每天结束时,对当天解决的题目进行回顾。检查解决方案的正确性,并思考是否有更优化的方法。记录下遇到的难点和解决方法,以及学到的新知识点和技巧。整理这些笔记并归档到适当的分类中,以便今后参考。
- 每周汇总:在每周末或开始新一周时进行总结。复习过去一周解决的题目,分析解题过程中使用的算法和数据结构。总结你学到的关键知识点、解题技巧和模式,并将其整理到博客中。同时,回顾自己的进步和不足之处,并设定下周的学习目标。
- 定期复习:根据你的时间安排,设定一个固定的时间间隔进行复习。回顾过去解决的题目和相关的知识点,重温解题思路和优化方法。通过复习巩固你的学习成果,并发现之前可能遗漏或忘记的知识点。
- 参与讨论和分享:积极参与LeetCode社区或其他相关的讨论平台,与其他人交流并分享你的解题思路和经验。通过参与讨论,可以从其他人的观点和解法中学习,并加深对问题的理解。同时,也可以借此机会接收反馈,发现自己的不足之处并改进。
总结的过程中,要确保记录清晰、准确,包括问题描述、解题思路、优化方法以及相关的学习成果和心得体会。可以使用笔记本、文档、博客等形式进行记录和归档,便于今后复习和查阅。此外,还可以考虑编写自己的学习笔记或整理算法模板,以帮助自己更好地理解和应用算法和数据结构。
总之,通过每天回顾、每周汇总、定期复习和参与讨论,结合记录和整理学习成果,你将能够更好地总结刷算法题过程中的经验和知识,提升解题能力和算法水平。
五、总结
刷题是一项不可或缺且具有挑战性的过程,不仅要求我们熟悉各种常见的算法和数据结构,还需要我们能够灵活应用它们解决复杂的问题。通过坚持不懈地练习,我们可以培养解题思维、优化编程技巧、并为面试和工作场景做好充分准备。
以上便是我为大家带来的力扣刷题之准备工作的具体内容,若有不足,望各位大佬在评论区指出,谢谢大家!感兴趣的你可以留下你们的点赞、收藏和关注,这是对我极大的鼓励,我也会更加努力创作更优质的作品。再次感谢大家!加油,大家一起坚持刷题!