新手如何有效的刷算法题(LeetCode)

过往历历在目,没有谁比我更了解算法小白的焦虑与迷茫。

每每在公众号后台看到读者留言求教时,我都在想:我能为他们做点什么。

这些经验并不会适合每个人,但或许也能对你有所启发。

注意,在这过程中,不要左思右盼,不要去搜索与思考到底是刷LeetCode好还是去牛客网刷剑指Offer好。

我作为一名算法小白的时候,就犯了这个错误:在粗略的了解基本的数据结构与算法后,准备开始刷题,总想着找一个最有效最好的刷题平台。

一会在LeetCode题解区逛逛,一会在牛客网看看面经,结果就是整个人烦躁不安,焦虑迷茫,题没有刷几道,羡慕嫉妒恨却增加了几分:别人的代码怎么这么简洁?别人的Offer怎么这么亮眼?

经过痛定思定之后,我开始自我剖析自己想好好刷题却无效的原因:

1、没有接受自己是算法小白的事实

我那时候只是按图索骥般的稍微系统的接触了基础数据结构与算法知识,根本没有真正的利用这些知识去处理问题。

在刷题的过程中,总想证明自己可以的,别人可以写成简洁高效的解题方法,我也要!于是去不停的找题证明自己,结果就是越刷越没有效果,自己根本就看不懂题目考察的数据结构与思想。

整个人完全奔溃,不刷题了,不准备算法面试了,不准备跳槽了!

后来我不停的告诫自己:作为一名非科班的程序员,肯定比不上他们呀,如果随随便便的学了一点就能刷题顺利,那别人大学四年不白学了!

所以前期先接受自己的思考方式,暴力解法其实也是一种有效的解法。

2、没有合理的刷题

我只是盲目的追求刷题的数量,即使刷了200道,脑中依旧一团浆糊。

后来才明白,吃透一道题目比乱刷十道题目更有价值。

经过不断的摸索与试验,形成了自己的一套刷题路径。

自己的解法

网上好的解法

自己的解法可以优化的地方

不停的优化

寻找相同的题型

总结

每一个题目都经过至少一遍这样的迭代,彻底吃透一道题进而掌握一种题型。

以一道极其简单的动态规划题为例,LeetCode第70号问题:爬楼梯。

没错,当时就那么菜!

二话不说,直接使用暴力解法。

后来看了网上高票答案的分析,知道了备忘录的概念,于是很容易写出优化后的代码。

//采用备忘录的方式来存子问题的解以避免大量的重复计算classSolution{int[]memo;publicintclimbStairs(intn){memo=newint[n+1];returncalcWays(n);}privateintcalcWays(intn){if(n==1)return1;if(n==2)return2;if(memo[n]==0)memo[n]=calcWays(n-1)+calcWays(n-2);returnmemo[n];}}

再后来,发现备忘录是自顶向下的方式,稍许变动,修改为自低向上的递推方式就是动态规划的形式。

按照这样的刷题路径下来,发现对这类题型有了初步的思考途径,有了发力点,再也不会一筹莫展:看题懵逼半小时,Coding只会按空格。

彻底搞懂这题后,就需要找到类似的题型,然后不断的重复练习:最小路径和、整数拆分、完全平方数、解码方法、不同路径、不同路径II。

通过这些练习,寻找题目中的共同点,为什么这类题型都可以这样思考呢?

慢慢的,知道了最优子结构、状态转移方程、重叠子问题的概念,不知不觉动态规划的知识点已经掌握了80%。

再遇到更高难度的动态规划的题目时,心里也明白,一时半会没做成无法就是最优子结构、状态转移方程、重叠子问题没有理清楚。

这样长期坚持下来,接触新的题型时也可以从容不迫的思考。

后记

原文标题:新手如何有效的刷算法题(LeetCode)

长沙市望城经济技术开发区航空路6号手机智能终端产业园2号厂房3层(0731-88081133)

THE END
1.[转帖]一些算法刷题的网站Grandyang[转帖] 一些算法刷题的网站 1. leetcode http://leetcode.com/ 2. careerup http://www.careercup.com/ http://hawstein.com/posts/ctci-solutions-contents.html 3. glassdoor http://www.glassdoor.com/index.htm 4. topcoder http://www.topcoder.com/https://www.cnblogs.com/grandyang/p/4294788.html
2.推荐大家几个算法刷题网站腾讯云开发者社区推荐大家几个算法刷题网站 算法是每个人都头痛又避不开的一道坎儿,大厂卡算法是必然的,小厂近年来也有逐渐倾斜算法考察的趋势,无论是工作还是学习都不能把算法能力落下,至于你问我对于crud的工作这玩意到底有啥用?说实话平常确实没啥用,但是架不住面试要考,而且比重很大,八股文没答出来但是算法做出来了可能就https://cloud.tencent.com/developer/article/1921879
3.GitHublabuladong/fucking主要功能:Chrome 插件可以在中文版力扣或英文版 LeetCode 上快捷查看我的「题解」或「思路」,并添加了题目和算法技巧之间的引用关系,可以和我的网站/公众号/课程联动,给我的读者提供最丝滑的刷题体验。安装使用手册见下方目录。 四、vscode 插件 主要功能:和 Chrome 插件功能基本相同,习惯在 vscode 上刷题的读者https://github.com/labuladong/fucking-algorithm
4.国外刷题网站LeetcodeHackerRank值得推荐国外有许多优秀的算法刷题网站,如Leetcode、HackerRank等,这些网站拥有大量高质量算法题库,涵盖各种难度,可以有效提高编程和算法能力。本文将重点推荐Leetcode和HackerRank两个国外刷题网站。Leetcode上有英文和中文两个版本,题目分类覆盖面广,题解和讨论质量高;HackerRank题型丰富,实用性强,有编程训练和技能认证等功能。https://www.66offer.com/158738.html
5.力扣(LeetCode)全球极客挚爱的技术成长平台分享|如何科学刷题? 合理运用心流通道,科学刷题,快乐刷题! 前言 怎么刷算法题?按照什么顺序刷题?如何科学地刷题训练? 如果你刚开始刷题,还不熟悉基本编程语法和常用库函数,推荐先刷力扣官方的入门题单: 「新」动计划 · 编程入门(有两道数据库的题,可以直接跳过) 有了一些简单题的积累,就可以开始刷我的题https://leetcode.com/
6.书单豆瓣高分&全网热评的算法神作本书结合竞赛实例,从数据结构、算法策略、时间复杂度与空间复杂度优化等多个角度,对各类经典问题进行求解,重点讲解了如何分析问题和解决问题,并提供了优化过程,引导读者进行刷题实战,进而提高算法思维能力,以更高的视角看待问题。http://www.broadview.com.cn/article/420385
7.有哪些学习算法的网站推荐?ACM 退役选手,算法刷题可以说是贯穿我整个大学生涯的事情,刷了几千道算法题,这些我私藏的网站都在https://www.zhihu.com/question/20368410/answer/906930526
8.2024春招实习生Tl面经(美团字节腾讯米哈游)2月27日~3月1日 - 刷算法 这几天都在刷算法, 由于博主高中曾有过算法竞赛经历(但是特别菜),所以这块比较拿手。 3月1日得知前端算法题需要用JS切,不能用C++切,遂道心破碎没有再刷题了/(ㄒoㄒ)/~~。 一下是博主刷算法主要用到的网站: 【1】牛客TOP101 https://www.nowcoder.com/discuss/605107379000061952
9.算法labuladong的算法小抄.pdf【算法】labuladong的算法小抄.pdf,开篇词 labuladong 的算法?抄 Table of Contents 开篇词 1.1 第零章、必读系列 1.2 学习算法和刷题的框架思维 1.2.1 动态规划解题套路框架 1.2.2 回溯算法解题套路框架 1.2.3 BFS 算法解题套路框架 1.2.4 我写了?诗,让你闭着眼睛也https://m.book118.com/html/2024/0730/5024342242011302.shtm
10.一个英文算法刷题网站,感觉比力扣好用,不用翻墙直接进然后这个网站有一个等级展示:,刚来的时候都是8级,然后往1级拼搏。 比力扣好的地方 1.代码提交测试速度很快,界面看着也很舒服,也不会提醒你充会员。 2.这个网站更开放一些,而且全世界的网友交流充分,我在力扣上刷题感觉那个编译器怪怪的,跟我平时用的不一样,且python版本也不一样; 这个网站相对舒服很多. 答题https://www.jianshu.com/p/ea0443567472
11.2024华为OD机试真题最新题库(B+C+D卷)+OJ在线刷题(C++Java3、技术一面:该面试官通常是该项目组的技术负责人,主要考察候选人对技术的理解和实际应用能力。面试内容通常包括代码题和项目问题解决,围绕计算机/编程基础+项目经验+代码能力进行考察,如应届生无项目经验,重点复习八股文+刷算法题 4、HR面:围绕求职动机、稳定性、薪酬期望、Gap经历、延毕等异常情况进行考察 https://www.jindouyun.cn/document/industry/article/179720
12.2024华为OD机试真题目录汇总B+C+D卷(484道)(JavaScript语言3、技术一面:该面试官通常是该项目组的技术负责人,主要考察候选人对技术的理解和实际应用能力。面试内容通常包括代码题和项目问题解决,围绕计算机/编程基础+项目经验+代码能力进行考察,如应届生无项目经验,重点复习八股文+刷算法题 4、HR面:围绕求职动机、稳定性、薪酬期望、Gap经历、延毕等异常情况进行考察 https://download.csdn.net/blog/column/12357945/124225992
13.双非硕士的辛酸求职回忆录:第2篇谈谈我是如何同时找到Java本人情况:双非硕,意向工作城市广深,Java和Python技术栈,对Go有一些接触;算法题刷差不多100道,简历上两个项目;有比赛获奖和普刊论文、专利。 面试的也不多,很多不在广深的也没投,现在把秋招的最终的一些情况: 实习小创业公司:Python开发(5k/m,当时觉得很知足了) https://blog.51cto.com/yuzhou1su/3781914