1500题 & 2600分 & 刷题历程分享【纪念帖】
22699
2022.07.09
2022.07.10
发布于 未知归属地

1500题 & 2600分 & 刷题历程分享【纪念帖】

写在前面

个人情况:目前是刚毕业已离校,接触算法大概是研二的时候(2021年1月)正式开始在力扣刷题,在此之前是写过一点点的语法题,没有过算法竞赛系统学习的相关经历,现在想起来也不知道之前都在干嘛😂,大部分时间都浑浑噩噩的过去了。

当初刷题也是为了秋招的笔试&面试,后来有段时间也沉迷于周赛的上分中,但那个时候还很菜,第一次拿到Knight徽章的时候高兴了一星期,现在的话就是佛系上分,有空了就打一打,掉分or上分都是随缘了,只要有进步就好~

现在对于算法的学习也是怀着谦虚求知和好奇心去学习的,没有很卷,毕竟的我的提交记录和各位大佬比起来还相差甚远😅(因为平常里自己确实是个懒人还是个拖延症晚期,一个被DDL驱赶着前行的懒虫),希望以后能有所改进(下次一定)。

刷题的时间线:2021.01~2022.7

header.jpg

progress.jpg

今天是2022年7月9日,恰巧发现自己的刷题量刚好到达了1500题,来力扣的时间大概也有一年零七个月了,从最开始的只会一点点编程语言的语法到现在取得的一些小小的进步,感觉时间过的还蛮快的,刚开始来力扣大概是2021年1月的时候,刚好那个月的打卡题都是并查集,所以我学会的第一个数据结构就是并查集了,当时2021年1月31日的题目是839. 相似字符串组,做完那道题还留了一个小小的足迹。(2021-01-31)

DSU.png

至此从2021年1月1日到现在每天都会登陆力扣,比较忙的情况下就只做做每日一题打个卡,有空的情况下就会去补周赛的题目,保持自己的头脑不会过于愚钝。

刷题初衷(初来乍到)

关于刷题的初衷应该和大部分为了找工作,参加秋招、春招的同学一样,都是为了能在笔试或者面试中不会表现的太差。我也是从零开始的,所以如果有刚来力扣且没什么刷题经验的同学看到这篇文章的时候,请听听我的一些小小建议(仅针对刚来力扣刷题并且没有什么基础的同学能在有效的时间里能多刷到一些面试可能会出现的高频题

  • 刷题初期最好有自己比较熟悉的编程语言,熟悉语言特性以及常用的API&数据结构,其次是要了解一些API的时空复杂度,就拿C++来举例,大部分同学在不熟悉语言特性的情况下,比如碰到题目需要排序或者取std::vector<T>时会因为不加引用&导致超时;再比如std::stringsubstr()函数并非是O(1)的,因此在估算时空复杂度的时候也应当考虑全面,请勿忽略API的开销。
  • 如果为了快速应付面试请以《Hot100》和《剑指offer》为先为主,可以多刷几遍,大多数情况下的高频面试题会出自这两个合集;如果这两个觉得吃力,可以按照tag先刷一类题,比如按照数组链表二叉树回溯……的顺序,每个类别按照2简单、3中等、1困难的比例去熟悉一下做题技巧和方法,然后再回头去做。如果以上两个专题都没啥太大问题了,可以试试《剑指offer》(专项突击版)和 题号为前300的题目
  • 在做题的过程中如果一道题10~15分钟没有任何思路,甚至暴力的方法都没有想到的话就直接去看题解好了,尽量不要去死磕没有任何思路的题目,刷题初期多看看题解学习作者的思路和代码对自己的提升也很快,毕竟写代码本身也是一件类似”照猫画虎“的事情。
  • 一般的OJ(Online Judge)C/C++语言的时间要求都在1s或者2sJava语言一般是C++的2倍,Python等语言时间会更宽松。针对C++而言,1s的时间评测机大概能跑1e7~1e8左右的数据量,所以会计算时间复杂度对能不能通过题目是一个很好的引导。
  • 时间复杂度对于一个算法来说,第一是可以决定算法是否会超出时间限制,第二是可以决定解决该问题会用到什么样的算法,比如我们拿到一道题看到数据范围是1e5,那么我们可以判定这道题的时间复杂度需要控制再O(n)或者O(nlogn)的级别,因此可以判断出这道题可能是O(n)的DP,可能是双指针或者是二分答案等等等等等,只要控制在合理的运算范围内,就可以排除掉一些不可能的算法实现,引导自己朝着正确的方向去思考。
  • 如果是刚刷题或者对算法掌握的不是很好的同学,拿到一道题想到的就是暴力、DFS、回溯,如果数据范围很小,假设只有10~20以内,那么可以考虑如此暴力的做法。如果给你1e5的数据范围,必然是不可以用暴力的方法去做的,所以数据范围是一个很好的启示,也能避免去写一大堆不可能AC题目的代码,从而提高刷题、做题的效率。
  • “温故而知新” 做题也不能一味的追求题量,很多题目也是需要去复习,反复去练习的。第一遍做的时候可以把看题解才能AC的题目打上标记,下次复习的时候争取不看题解把它AC掉,如果还需要看题解说明还是没完全掌握,则需要进行第三遍的复习。

关于周赛

下面是我力扣周赛艰难的上分曲线,2021年之前参加过几次是为了签到拿积分😂,那个时候只会第一题签到且不知道任何算法。后面偶然的机会结识了一些志同道合的小伙伴,拉了一个小小的群聊叫未来成功人士交流群,「此处应该表扬群主真会起名字,哈哈哈哈哈哈希望未来都能是成功人士」,跟着他们学到了很多,也给了我很大的帮助,在他们的影响下,然后就是开始慢慢上分的阶段了,可以看到在每个阶段(对应的颜色区域内)都会徘徊好一阵才能进步,毕竟也是个小白在慢慢爬,和各路OI、ACM竞赛大佬是没法比的,始终是难以望其项背,毕竟一场周赛就上Knight / Guardian的大佬比比皆是。(此处省略一万字的膜拜%%%)

clist_curve.png
clist.png

关于周赛上分之前看过的一篇帖子是悟空大@王悟空2021年11月27日写的,如何在Leetcode达到2400分,截止目前悟空的竞赛积分最高分是2700+,这里我贴出当时的经验贴链接希望可以帮助到更多的同学。

关于周赛上分

  • 一开始我也是一题两题选手,也是所谓的起步阶段,然后为了夯实自己的基础,在其他OJ上按照推荐的专题做了很多题目,参考的是kuangbin专题,这个网上一搜就有,题目都比较经典。大概刷了其中的搜索图论最短路数据结构并查集最小生成树线段树基础DP数论基础字符串等比较基础且容易搞定的专题,比较难的专题和一些进阶的算法也是抽空了就会去看看,在这期间也是边打周赛边去刷专题,同时力扣的每日一题也是按部就班,每日都会按时做题打卡,然后周赛成绩就有了一些进步。
  • 随着知识的不断积累,周赛也能稳定三题偶尔AK了,当然AK也是看运气,后来的安排就是复盘、补题、找对应的题单练习,比如前一阵周赛还出线段树相关的题,赛后就可以找线段树相关的题目加练。
  • 周赛做不出来的题目一定要记得去补题,周赛之后很多大佬的题解质量都是非常高的,可以学习到很多自己比赛时想不到的方法,rank前排大佬们的代码也是很值得学习的,总之就是要做到真正意义上的一题多解。
  • 如果和我之前一样没有系统学习过算法的同学,在周赛中第一次碰到没见过的算法或者模板题,赛后除了学会这个算法以外,也应当适当的找一些同类型的题目做一做,可以去Luogu或者其他OJ上找对应的题单练习加深巩固一下自己的题库,下次碰到的话争取拿下。
  • 总之我的方法就是边打边补边进步,任何事情不可能等我们都准备好了再去尝试,这样的话很容易陷入死循环,毕竟题目也是写不完的,且写且珍惜(手动doge🤣)

下面分享一些周赛大佬们的做题经验和指南,我将回答部分已经截图出来方便直接查看,原贴原链接也已经给出。

回答1:原贴参考链接:怎么破局?做一道算法题,中等以上的往往1小时以上,脑细胞死了一大片

TsReaper.jpg

回答2:原贴参考链接:瓶颈期求帮助

0x3f2.jpg

回答3:原贴参考链接:2400的分段如何进一步提升?

3f.jpg

一些不错的参考链接

总结

首先非常感谢力扣 (LeetCode)这个平台和社区工作者,营造了一个良好的刷题氛围,其次也感谢很多题解作者的无私奉献和持续输出,不论是每日一题还是力扣的周赛题解,都会有非常好的题解给读者们学习和参考(此处应该艾特一下平常看的最多的两位题解作者宫水三叶, 灵茶山艾府 , 从两位作者的题解中确实学到了很多,真心感谢~)。与此同时在力扣刷题的这些阶段里,我也很幸运的在2022秋招中收获了很多大厂的offer,之后我也会写一篇关于自己秋招的经验分享,希望可以帮助到更多的同学。

在力扣的这一年多时间里我也收获了很多知识和朋友,让我看到了他(她)们独特并且非常优秀一面,同时也激励着我要不断地进步,在此非常感谢他们。我也希望每一位在力扣刷题的朋友们都能开心Coding,心想事成,Rating++ && Offer++

评论 (81)