算法题从入门到放弃?刷了几千道算法题,关于如何刷题有些话我想对你说

LeetCode刷题顺序(新手入门) 移动零给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。难点就是不复制原数组要原地修改,解法为设置一个res,记录前面的0的个数,每次插入时只要插入到nums[i - res]中即可移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 阅读详情

作者 | Rocky0429

来源 | Python空间

大家好,我是 Rocky0429,一个曾经在 ACM 界划水多年的蒟蒻...

在“刷了几千道算法题,这些我私藏的刷题网站都在这里了!”这篇文章中,我有说过要写一篇如何刷题的文章,然而好几个月过去了,我实在没法舔着脸继续拖下去了...

所以,我来交作业了...

我好多次在想要如何写这篇文章,试图去回想我刷题的时光,当时的种种感觉拼接起来,一次次动笔,又一次次的放弃。

其实诸多纠结,我试图遵循常规,将这种刷题经验公式化,列个一二三四,期间穿插一些算法题来 give an example,这样好像才是真正像是经验的样子,但我总觉的哪里奇怪。

我问自己,当年还是个小白,对刷题一无所知的我是否想要去看这样的文章,我想答案应该是不会...

所以这篇文章我可能会写成自己想写的样子,它不会教你速成,没有捷径,单纯是一个当年机缘巧合入了 ACM 的混子,有一段很长的(三年)连续刷题的时间,恰好有一点自己感想的碎碎念。

以下仅代表个人想法...

很多人开始他的刷题之路因为各种各样的原因:进大厂、研究生复试或者参加竞赛拿牌,当然也可能是因为喜欢。其实不管你抱着何种目的开始,我希望你能一直在刷题这条路上走下去,毕竟除了提高自己解决问题和写代码的能力这种显而易见的好处,也能当作无聊时候的一种消遣...

其实随着刷题的深入,我发现刷题其实就是分为两步,第一步有思路,即知道用哪种姿势怎么解题;第二步是实现,即将你的思路转化为代码。接下来我所有的废话都是围绕这两步来展开。

0x01 有思路

先说第一步:有思路。

算法题刷多了,你就会发现,最后其实在你脑子里记住的不是实现这道题的代码,而是解这道题的思路。

当我们刷了几百道几千道算法题的时候,你不可能记住每道题的代码,但是你可能知道这道题的思路,也就是出现类似“这道题我见过,我知道用这样那样的方法可以做出来”。有了思路,其实把它实现出来就是自然而然的事儿了,当然可能有人说知道了思路也不知道怎么实现,现在我先不说,这是我们下一步要讲的问题。

上面说的是我们要走到的目的地,那如何走上这条路,从而到刷题刷到思路“泉涌”呢?其实很简单,我们从小到大一直在被动习惯的四个字:题海战术。

题海战术,说白了就是多刷题,见多才能识广。

但这里的多刷题,不是指多瞎刷题,而是有方法的去刷。至于刷题的网站我已经在文章的开头放链接了,不知道去哪找题的可以看一下。

首先说什么是瞎刷题,就是看到一道刷一道,这是很多刚开始刷题的同学容易犯的毛病。

有的追求数量,刷了一堆简单题,沉迷在 AC 的快感中不能自拔,在深深的自我感动中依然菜的扣脚;

有的追求无脑,看到一道题就去网上搜答案,以为会解决问题,实则搜到了还看不懂,正好一劳永逸,给自己下了不是这块料的断言,成功的做到了开始即结束。

别问我为什么知道,我才不会告诉你当年我就是这样...

其实怎么用正确的题海战术,在我看来,其实也还是两步,第一步多题一解,第二步一题多解。

当然在此之前,我觉得你得先搞明白什么是时间复杂度和空间复杂度,不然不懂这些指标,你也不知道算法对于你当前题目的优劣。之前写过一篇旧文,有兴趣的可以看一下。

循序渐进带你学习时间复杂度和空间复杂度。

0x01-1 多题一解

多题一解,就是把多种同类型的题先放在一起来做,也就是俗称的刷专题。下面是我当年刷题的一部分分类的截图:

很多大佬说做题要追求完美,一道题来 N 种姿势,但是对于刚开始起步的同学来说,一道题带着多解的思想包袱去刷,本身就是一种负担。你很难指望初学者能一上来就一题多解,没那么多见识,脑阔里没储备那么多的算法类型,能够暴力破解且跑通就已经是烧高香了。

这里再多提一嘴,关于网上搜答案这件事,答案可以搜,但是不要上来一看题,感觉自己不会就立马搜答案,要尝试思考,多在草稿纸上写写画画,实在想不出来再去搜。

搜到的答案我不希望你去看别人的代码,按照别人的代码一步步的写出来其实本身没有多大意义,真正有意义的是别人的思路,通过别人的思路来自己实现出现,这才是最应该做的。

这样做的好处是,你可以很快了解一种类型题目的做题方法,加深对某类算法的理解,总结出做题的套路,这算是一种抽象的概括能力。很多时候你就会发现,题目不过是在某类解决办法方面做加法减法。

0x01-2 一题多解

其实这个不用刻意去追求一题多解的能力,刷的专题多了,碰到的题目多了,自然而然你碰到一道题的时候脑袋里就会有想法,觉的可以这样做,也可以那样做,这个时候你就可以对比不同的时间复杂度和空间复杂度,选择当前的最优解法。

说一题多解,其实就是希望你在碰到一个问题的时候能够多想一步,一步一步再一步,不同维度不同姿势都尝试一下。刚开始这可能比较难,毕竟这涉及到一个改变,因为人都是有惰性的,毕竟只求一解比自找麻烦的求多解舒服多了...

题目见的多了你就会发现,很多时候你会碰到这种情况:A 题你有 5 种方法去解决它,改变它的某一个条件变成 B 题,作为 A 题的相似题 B,可能这个时候你照搬 A 的解法来解决 B,你只剩下 3 种或者更少的解法可以解决 B 题,如果你只会 1 种解法,刚好这种解法失效,那你就只能再另想它法。

所以一题多解的好处也是显而易见的,就相当于你的手里多了很多的选项,选项多了不管你在面试或是其它时候,都能手里有牌可打。

在这里我又要多提一嘴,追求一题多解并不意味着“不择手段”的追求题解数量的堆叠,也就是不要过分追求所谓奇淫技巧的解法,而这恰恰是许多同学容易犯的毛病,错误的认为了奇淫技巧等于水平高超,在我看来这个除了能引来别人一句卧槽的惊讶,从而带来一点内心虚荣心的满足以外,其余的用处不大,看个热闹就得了。毕竟鲁迅先生曾经说过:“Use your best judgement”。

当然我也不是全盘否定技巧,但是你连个两三百道题都没刷完,你就在这给我讲你要技巧,我会认为你是在耍流氓...

0x02 实现

一道题有了思路,其实这道题的 90% 你已经解决了,把它实现出来按理来说就是自然而然的事儿了。

当然可能有同学知道了思路,但是就卡在这 10% 不知道怎么实现上,那这就是你写代码的能力问题,其实一样的,这就是不熟练,不熟练的原因就是练少了。

其实这个问题的唯一解还是所谓的“题海战术”,多练习,唯手熟尔。

刚开始的时候不管是书上的例题,一些简单的水题或者你想实现的一个简单的东西,按照你的想法写出来或者看一遍别人怎么写的,自己再一步一步的默敲,不要怕麻烦,一定要自己动手,不要看会了,我们都知道看会了其实不是真正的会。但是慢慢当你习惯了这种方式,你的代码能力会潜移默化的变强。

别问我为什么知道,我难道要说作为一个当年上了大学半年还没写过一次超过 20 行的代码的男人,经过一个寒假以后,能切百十行代码的题?

也太丢面儿了吧,说好的整个学霸人设呢...

0x03 第三步

咦?不是只有两步嘛,哪来的第三步?

嘿嘿,总得给能坚持看我说废话看到这里的同学开个小小灶不是...

其实还有两点是我想说的,而且这两点是我觉得在整个过程中最重要的。

0x03-1 做总结

怎么说呢,做总结这件事的好处,谁做谁知道,不信你就试试...

每道题有每道题的总结,每种类型的题有某类题的总结,千万不要怕麻烦,虽然刚开始的时候确实会很麻烦...

每每回想起来,我最后悔的就是在我刚开始刷题的时候没有做总结。当年集训队老师告诉我们每道题做完都要把题解发布到 优快云 上,记录自己的思路,解题方式和代码。这件事乍一听我觉得太麻烦,觉得“有这个时间我多刷道题它不香嘛”,一直当作耳旁风。

后来真正开始在 优快云 上发题解,并不是我突然顿悟,而是集训队老师看我们太懒,强制执行,然而这个强制,在经过初期的不适以后,慢慢的让我形成了做什么都要总结记录的习惯,一下子就写了 6 年。下面是刚开始的一些截图:

习惯性梳理总结,在这个过程中重新产生更多的认识,理解更深,有更多的想法,无论后来成为 优快云 的博客专家(Rocky0429)或者后来开始写公众号(Python空间,id:Devtogether),都是因为这种积累,我因此而获益,对我们老师感激一生。

0x03-2 保持热情

保持热情,不仅仅是能坚持,而要在坚持上最好能带有一点兴趣。刷题真的是一个很漫长的过程,如何在这个过程中能坚持下去真的很难做到...

我觉得你最好有一个最终的目标,这个很多开始刷题的同学肯定都有,不然没人闲着没事找事去刷题,有了最终的目标朝着这个方向去努力,同时把这个过程分成一部分一部分,比如拿刷专题来说,我这段时间刷链表,下段时间刷贪心,再下段时间刷 dp...

将目标量化为可衡量的每一段,自己有了掌控感,一步一步的向着最终的目标前进,知道自己离着还有多远,不至于半途而废。

拿我自己来说,当年搞 ACM,半年以后我已经准备放弃了,那段时间完全迷茫,觉得自己水平很差,没有机会去参加比赛,不可能拿到奖牌。那段时间我开始去寻找别的出路,去参加 Python 的社团,准备转去做项目。

浑浑噩噩了一圈,最后还是回去做 ACM,一方面是不想让自己半年的努力付诸东流,对拿牌子的执念,更多的是我发现坐在那写项目和做题比起来,我更喜欢 AC 的快感。

0x04 写在之后

以上就是我的一点点经验,其实没有什么新鲜的,有点啰嗦,也不一定能让你有什么进步。我一直觉的只要我们付出了时间和努力,开始向更好的方向迈出第一步,我们解决问题和写代码的能力就会潜移默化的提高。

在这个过程中,收获的远比去解决问题更有成就感,当然这种感同身受更多的需要你自己在这个过程中去体验。

可能末了整篇文章最有价值的只有四个字 - 题海战术。

希望你在变好的路上越走越远...

完)





leetcode-刷题顺序推荐 题目分类及刷题顺序推荐 一. 数组 题目分类 题目编号 数组的遍历 485、495、414、628 统计数组中的元素 645、697、448、442、41、274 数组的改变、移动 453、665、283 二维数组及滚动数组 118、119、661、598、419 数组的旋转 189、396 特定顺序遍历二维数组 54、59、498 二维数组变换 566、48、73、289 前缀和数组 303、304、238 题解 数组篇 二. 字符串 题目分类 阅读详情

相关推荐

LeetCode高效刷题指南:从热门100题到算法思维突破

在计算机科学中,数据结构与算法是程序设计的核心基石,而算法训练则是将理论知识转化为工程实践能力的关键桥梁。面对海量题目,如何科学规划刷题路径、理解复杂度分析的本质,成为开发者普遍关注的问题。本文从经典双指针、动态规划、二叉树等基础算法模型出发,剖析高频考点的解题原理与技术价值,并延伸到技术面试、工程优化等真实场景。通过引入热门百题精选、三轮刷题法与错题复盘机制,帮助读者构建系统化的算法思维,平衡效率与深度,让每一次提交都成为能力进阶的踏脚石。无论你是准备校招、社招,还是希望夯实内功,都能从中找到可落地的实践

weixin_33416697的博客 428

leetcode 刷题指南 & 刷题顺序

leetcode 刷题指南

qijingpei的博客 6186

力扣刷题全攻略:从热题100到高效笔记模板

算法学习与编程面试准备中,力扣(LeetCode)是一个绕不开的核心平台,其价值在于将数据结构与算法拆解为可反复训练的单元。刷题的本质是通过刻意练习,培养将模糊问题抽象为数据结构、选择合适算法策略的能力。有效的刷题方法并非盲目追求题量,而是通过分类集中突破、掌握复杂度分析、建立系统化笔记来构建知识体系。力扣热题100作为高频面试题的浓缩精华,是搭建算法框架的理想起点。结合科学的节奏管理和间隔重复复习策略,学习者能将零散知识点串联成套路模板,从而应对新题时更具思路。本文以个人刷题笔记的形式,从心态准备到工具选

weixin_30768881的博客 221

leetcode的刷题顺序

LeetCode还有一些特殊类型的题目,如数据库、多线程、设计问题等,根据自己的兴趣和需求,选择性地刷一些。从数据结构入手,先刷一些基本的数据结构题目,如数组、链表、栈、队列等,帮助巩固基本的数据结构知识。接着刷一些基础算法题目,如递归、二分查找、排序等,这些算法在解决其他题目时会经常用到。在掌握了基本的数据结构和算法后,可以尝试一些高级的算法,如位运算、并查集等。字符串问题也很常见,刷一些字符串处理的题目,如字符串匹配、反转、去重等。刷图算法相关的题目,如拓扑排序、最小生成树等,加深对图算法的了解。

AlgorithmHero的博客 979

普通前端秋招复盘:面试准备、算法刷题与offer选择

前端面试的核心考察点往往不是API的调用,而是对JavaScript原理、浏览器机制和框架设计的深度理解。从事件循环、闭包原型链,到Vue响应式原理与diff算法,这些基础知识构成了面试官追问的底层逻辑。扎实掌握这些原理,不仅能帮助候选人在技术面中从容应对连环追问,更能支撑起工程实践中的性能优化与复杂场景设计。在秋招季,无论目标是大厂还是独角兽,系统化的面试准备都尤为重要,包括简历项目的深度复盘、高频算法题的刻意练习以及手写题的标准输出。本文作者作为一位没有大厂实习经历的普通前端研究生,真实记录了从基础补漏

weixin_29535577的博客 715

一.Leetcode刷题顺序

1.按照数据结构 数组和链表(二分查找,排序(初级排序(选择,插入,希尔),高级排序(归并,快速,优先队列)),双指针,滑动窗口), 栈和队列(单调栈,单调队列,优先队列),树(二叉树, 二叉查找树, 平衡查找树,堆),图(无向图(DFS,BFS ),有向图,最小生成树(Prim,Kruskal),最短路径(Dijkstra)),Hash 2.按照算法思想 递归,回溯,分治,贪心,动态规划(背包) ......

682

算法题做到崩溃?刷了几千道算法题,关于如何刷题有些话我想对你说

算法刷到最后,最后记在脑子里的不是代码,是思路,如果你有思路,那你一定能把代码写出来,你不可能记住所有题的代码,唯一可以记住的是解题思路,所以怎么码代码不是一个问题,怎么解题才是一个问题,建议刷题的时候这样刷,看到一道题,先想想怎么解,如果是你的话你会用什么方法去解,想好了以后用代码实现一遍,看能不能行,一般把想法用代码实现后,你的代码跑不通,90%以上的原因不是你的编程问题,而是你的思路在某个点...

Rocky0429 2万+

JAVA小白leetcode刷题顺序--offer:-提供

JAVA小白leetcode刷题顺序 本人也是java小白一个,刷题剑指offer也是开始第三遍,准备记录一下每道题的一些通用解法,可能不是最优的,但一定是最容易理解和接受的~ 小白选取的《剑指offer》是LeetCode上面的剑指offer系列,里面的题目顺序和牛客上面有些许差异,所以这个专题可能更适合各位在LeetCode上刷题的小伙伴儿哈! 欢迎各位小伙伴顺便关注一波哈~

一文讲清楚算法刷题-计算机专业新生必看

从升学的角度来看,每年考研或者保研,在复试阶段一般都有机试,这个机试就是在规定时间内做几道算法题;有些学校没有机试,但也会以笔试的形式出几道算法题,让同学手写。

Sunny不要停的博客 1477

超全!!snowboy语音唤醒(树莓派4b)

通过snowboy进行树莓派的语音唤醒

crimaster1024的博客 8738

Word公式批量转MathType终极指南:解决omml2mml.xsl缺失与格式调整难题

本文提供Word公式批量转MathType的终极解决方案,重点解决常见的omml2mml.xsl文件缺失问题,并详细讲解批量转换与格式调整技巧。通过补全文件路径、分批次转换及样式预设等方法,大幅提升学术论文公式编辑效率,适用于Office 2016及以上版本。

weixin_28419039的博客 1355

力扣日刷100天:热题100+Python刷题方法论与避坑指南

算法面试中,数据结构与算法是核心考察点,而动态规划更是高频难点。理解状态转移与边界条件,能显著提升解题效率。在工程实践中,利用Python内置数据结构与简洁语法,可以快速验证思路,降低调试心智负担。针对股票买卖这类经典DP问题,通过维护历史最低价实现一次遍历,是典型的优化手法。这种练习不仅覆盖面试考点,也能锻炼复杂问题的拆解能力。日常刷题若想持之以恒,需要合理安排范围与节奏,并警惕超时与边界翻车。本文结合力扣热题100的日刷经验,分享如何用Python系统刷题,并避开常见陷阱,帮助学习者从“看懂”走向“会做

weixin_31423955的博客 176

SIMetrix教程-001.SIMetrix软件简介与安装

  由于某些原因需要用到SIMetrix仿真软件,然而网上的资料并不是特别多,故在此记录一下这款仿真软件的学习过程,也给有需要的人提供一些参考,免走弯路。如果使用过Pspice或者LTspice软件,学习SIMetrix会很容易入门,仿真软件都是大同小异的,会一样后都可以快速入门其他软件。   SIMetrix是一款以SPICE模型为基础的仿真软件,集成了SIMetrix和SIMPLIS两款内核,为工程师提供了可靠的、易于使用的、并完美结合了速度与精度的电路仿真方式。官方的话不多说,和LTspice一样,优

gaoyong_wang的博客 2万+

如果你还不知道如何学习算法,你需要看这些文章

点击上方蓝字设为星标下面开始今天的学习~1、大厂面试为什么总考算法?以及如何避开算法面试。2、算法题从入门到放弃?刷了几千道算法题,关于如何刷题有些话我...

程序员吴师兄的博客 632

基于YOLO的印章检测及文字识别

针对印章自动化检测与文字识别需求,提出了一种融合改进YOLO模型与OCR技术的端到端解决方案,旨在解决复杂背景干扰、印章残缺变形及环形文字排列等难题

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 8224

SI案例分享--FPC(柔性电路板)信号仿真

设计高性能的柔性PCB时,由于采用了网格地的参考面构造,因此,需要按照特定的结构进行布局,才可以保证所需目标阻抗的稳定性,该结构的配置过程称为“Hatch Configuration”,合理的参数配置将有助于得到满意的设计效果。

一只豌豆象的博客 2832

回过头来看了一下自己在头条的这6年,最终只剩下了这份1800页的算法笔记!(1)

今天的文章可谓是积蓄了我这几年来的应聘和面试经历总结出来的经验,干货满满呀!如果你能够一直坚持看到这儿,那么首先我还是十分佩服你的毅力的。所以看完之后,还是多多行动起来吧!可以非常负责地说,如果你能够坚持把我上面列举的内容都一个不拉地看完并且全部消化为自己的知识的话,那么你就至少已经达到了中级开发工程师以上的水平,进入大厂技术这块是基本没有什么问题的了。就没多大意义了。所以看完之后,还是多多行动起来吧!

2401_84093054的博客 302

Hermes Agent 安装部署完全指南

Hermes Agent安装部署指南提供了两种安装方式:一键脚本安装和手动分步安装。该AI助手支持多平台运行(Linux/macOS/WSL2),核心功能仅需Git作为前置依赖,其他依赖如Python、Node.js等均由安装脚本自动处理。文档详细介绍了系统要求、依赖管理、配置目录结构、环境变量设置以及10个手动安装步骤,并提供了功能模块化选项,用户可根据需求选择安装语音交互、浏览器自动化等扩展功能。安装完成后可通过hermes doctor命令验证环境,并通过交互式向导完成初始化配置。

简简单单Onlinezuozuo 2634
上一篇: 机器学习建模神器PyCaret已开源!提升效率,几行代码轻松搞定模型
下一篇: 搞AI的注意了,停下手头的活,再忙也要看一下这个!
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值