Redian新闻
>
刷题算法必读|面试向的刷题小技巧

刷题算法必读|面试向的刷题小技巧

教育

前言

本文是针对「刷题常见问题」的一些解答,如果把刷题比作通关,那么在打 Boss 前一定先把技能点点满,做好足够的准备才能顺利通关。
计算时空复杂度的能力

掌握此技能的好处在于:

  • 当你设计出了某一时间复杂度的算法,可以根据数据范围大致判断其是否可以通过。

  • 不会问「为什么我的代码超时了」这种问题。

例如你设计了一个时间复杂度为O(N3)的算法,而这道题 N 的最大值是 1000,你的代码超时了,你应该就知道是时间复杂度太高了,应该进行复杂度层面上的优化,而不是去这改一改变量,那改一改范围。如果经验足够丰富,应该在编写代码之前就能大致清楚代码会无法通过。

调试代码的能力

掌握此技能的好处在于:

  • 难道你想用人脑模拟运行吗。

  • 不会问「为什么我的代码没有通过xx 测试数据」这种问题。

大部分的题目的代码行数也就三四十行,如果这都无法调试,很难想象在工作时面对屎山该怎么办。最简单(也是最好用)的调试方法就是输出调试方法,把你的代码中关键位置的变量值打印出来,看看有没有什么问题,就能有效地解决 Bug。
如何刷题?

首先不推荐如何速成刷题(例如背题、套模板等),所以这不在讨论的范围内。

一般来说,刷题需要至少持续三个月的时间。面试中遇到的算法题大多都是 easy-medium 难度(那为什么很多面经都是 hard 难度?「不幸」者偏差罢了。只有遇到奇葩面试官或者乱七八糟的题目才会去网上吐槽),看到题目就会有一些初步的想法,然后根据自己到思考(或者面试官的提示)进行优化,得到答案并实现代码。一般不会遇到想半小时还想不出来的题目,所以刷题更重要的是「熟练度」。

基于此,推荐最好的刷题方式是如下的两步法:

第一步:根据专题分类进行刷题。这一步可以看成「学习一个知识点 A」「在力扣上找到若干 道知识点 A 相关的题目」「刷掉它们」。

举个例子,比如今天我想学习滑动窗口,就可以首先找一找滑动窗口相关的资料进行阅读,理解后在力扣的题目标签里找到「滑动窗口」挑选几道题目(如果你是尊贵的力扣会员的话,直接按照出现频率排个序就啊好哦了)。在挑选题目的难度上,我建议按照 easy-medium-hard 的基本顺序,因为你是在学习一个新的知识点,所以首先肯定是要看看最简单的题目是什么样的,当然在最后你也要通过 hard 题看看难度的上限,例如是否需要结合其它知识点,是否需要进行一些转化之类的。

  • 第一步的作用在于「熟悉所有面试相关的知识点」。很多同学在知识储备不充足的情况下,一上来就随机刷题,效果是很差的。

  • 第二步:根据你喜欢的方式随机刷题,例如按照公司 tag,跟着每日一题,或者随机抽题。为什么要「随机」刷题呢?这是因为在实际的面试中,你(在不思考的情况下)并不能知道面试官给你的题到底使用什么方法解决。在第一步中,我们要学习滑动窗口,刷滑动窗口的题目的时候你是知道「这题需要使用滑动窗口」的,而在面试中你并不可能知道。

所以第二步的作用在于「锻炼思维能力」以及「查漏补缺」。前者即在不知道具体考点的情况下,通过自己的思考求解问题。后者即在第一步中如果你漏了什么重要的知识点,还可以抢救一下。
刷多少题合适?

如果你是卷王,我推荐你把题库刷穿。

否则,我觉得 300-500 题就是一个很不错的刷题量了,虽然题库已经有超 2000+ 的题目,但 300-500 的量适合大多数来力扣的同学,如果有兴趣想要深度探索,那么学无止境,更多的题解等着你来通关,你一定会感受到那种上头的感觉。

需要做力扣的周赛和双周赛吗?

周赛和双周赛相当于上面我说的第二步,即随机刷题。

如果你还没有完成第一步,建议不要尝试。

如果你正在进行第二步,那么这些比赛是一个很好的检验自己能力的机会。

当然不得不说的是,比赛的难度(尤其是第 4 题)是高于面试的,并且时不时会有一些面试不会考的知识点,所以如果发现自己做了 600/800/1000 题的时候比赛还没有办法做出第 4 题的话,也不要慌。

一般比赛中的 1/2/3 题都是挺好的。
一些常见的刷题错误

时间复杂度和运行时间并不是一个概念。面试时我们一般追求的是优秀的时间复杂度(即O(N)优于O(N2)),而运行时间除了与时间复杂度有关以外,还和时间复杂度中的常数有关。

例如方法一对数组 a 进行了 4 次遍历,而方法二对数组 a 进行了 1 次遍历,虽然它们的时间复杂度都是 O(N),但方法二的常数较小,因此更有可能得到短的运行时间。

而实际的代码编写中可能需要考虑的不止这些,例如测试数据以及操作系统本身就是不可忽略的因素。例如对于一个长度固定 10000,元素均为正整数且小于等于 10000 的数组,测试数据是可能为 1000010000 这一天文数字,而实际的测试数据只有几十、几百组,在力扣上运行较快的代码可能是「过拟合」的。由于 cache/memory/cpu 这些硬件都是进程共用的,力扣的评测系统运行你的代码时,它们的状态也不是固定的,所以同一份代码运行多次的时间也会不相同。

此外,打败的百分比还和提交的时间以及测试数据的更新有关。每周更新的竞赛题提交的人数少,很容易打败 100%。题号排在前面的题会时不时更新测试数据,而力扣给出的是运行所有测试数据的总时间,所以往往会比早提交的人用的时间多。

因此,在刷题时我们应当追求的是「尽可能优秀的时间复杂度」,而并不是「打败双 100% 的代码」。

小技巧

对于刷一道题目而言,如果时间充裕,正确的做法应该是:

  • 一定要首先给自己一些时间思考。

  • 如果直接做出本题,应该去看一看题解中有没有更优秀的做法。

  • 如果没有做出本题,应该去看一看题解的思路,复盘一下自己想出了哪些部分,没有想出哪些部分以及原因,通过这样的总结不断提升自己。

如果不思考就看题解,那么就没有留给自己思考的机会。题解里是不会出现展现自己的思考过程的(尤其是错误的思考过程),就算有,想通过读一遍思考过程就能达到相同的思考效果也是不现实的。

如果不看题解,那么你可能会错过更优秀的做法,无法进行查漏补缺。
写在最后

其中有部分同学,感觉会把重点完全放在 AC 一道题目中,其实对于个人技能成长来说掌握和挖掘题目深层次的东西,比 AC 题目的快感更重要。

面试中考察的是对相应产品的理解,主要是看你的熟练度,如果要想代码写的好,刷题是王道,经典的库都是最优写法,这些需要持续不断的阅读积累才有机会脱引而出。


BY / 

本文作者:zerotrac

编辑&版式:Janson

声明:本文归“力扣”版权所有,如需转载请联系。


点个在看,少个 bug

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
在小红书,每天 get 一个窜稀小技巧痛别父亲离谱!Microsoft工程师用算法选人、Meta用算法裁员!9个超实用的人际交往小技巧,越早知道越好(建议收藏)Chase IHG Premier 福利之 $25 United Travel Bank Cash 使用小技巧晨读|最新研究:开着灯睡觉更容易肥胖仅剩一席|九大投行导师亲自带队,搞定量化刷题面试,小班授课,报完截止!马上涨价!美国私校老师都在用的刷题系统,体制外牛娃的“小灶”就是它!数学启蒙|提升计算速度,试试这些小技巧,亲测有效!一个控制「胡思乱想」的小技巧|每日罐头喂奶时总是喷奶怎么办?分享 5 个小技巧BoA 信用卡避免FTF小技巧:从无FTF的信用卡转卡!小心:这个申请季部分大学调整面试政策,也有大学不早点递交无面试机会-附美国TOP30大学面试政策一览!每天2道题,0压力备考AMC8,备受好评的刷题打卡,今晚优惠结束!一举两得的第二周:丰富多彩免费~ 荷顿区、蛤蟆囤堆肥快来领, 施肥小技巧, 包你后院花美收成好使用 cron 定时任务的小技巧 | Linux 中国美国多地发布高温预警影响约1亿人!几招避暑抗热的小技巧,大家收好了。新生9月赴美必读|那些能让你生活得更好的开学季指南!家庭省电8个小技巧使用 LibreOffice 键盘快捷键的小技巧 | Linux 中国北京/上海内推 | 小红书智能算法组招聘NLP/音乐/语音识别算法实习生让女朋友听了直夸的说骚话小技巧!!!力扣刷题技巧篇|程序员萌新如何高效刷题还没找到适合的时间管理方法?这些小技巧你知道了吗?2021年世界出版自由前10名及后10名一个减肥小技巧,不用长期节食也能瘦晨读|最高法院推翻堕胎权的宪法保护,为什么这么多人反对疫情两年后欧洲三国游 (6)- 西班牙赛哥维亚 Segovia今年最震撼的刷屏,没有之一波士顿进入高温紧急状态,持续至周四!超实用12条酷暑降温小技巧,必看!放学后想问问孩子在校的情况,你以为在沟通,其实可能只是尬聊……实用亲子沟通小技巧,学起来!潘汉年一案, 其实就是老毛的一言九鼎【健康】天气炎热,这些小技巧帮你降温消暑!安然度过这个夏天看图辨宝小技巧——“大王私房课系列二”第1期
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。