leetcode刷题指南

本文我将分享给大家一套我自己使用良久并觉得非常高效的 学习论,它可以运用到 Leetcode 上的刷题,也可以 generalize 到生活中涉及到学习以及记忆的方方面面。当然,本文将以 Leetcode 刷题为 case study 去进行讲解。 更具体一点, 我会教大家如何运用该学习论在 4 个月的时间内从 0 算法基础到实打实刷满 500 道题,并且形成长期记忆,同时具备高效解决各种同类型题目的能力。

自我介绍

我是 Lsk, 是一名现在就读于UCB, CS 院 AI 相关 Master 的研二学生。在我的求职备战期间,我是一名忠实的 Leetcode 用户,并最终凭借 Leetcode 这个平台给予的各方面帮助和资源拿到了北美 Facebook (Meta) 的 Full-Time Offer。时隔数月,我怀着一颗感恩的心回到这里,希望可以给大家分享下自己在 4 个月的备战期间积累的一些个人经验,尽可能地帮助大家少走弯路。本文篇幅较长,但诚意满满,力求字里行间具有逻辑性, 连贯性以及可读性。

刷题时间线
我准备刷题的时间点非常晚 ( Master 第一年全部用来刷 GPA 了,没有做任何面试准备,甚至没有实习, 现在回首坦诚地讲有一丝后悔)。真正开始有规律地准备刷题大概是在第二年的 7 月到 10 月这四个月的时间,这四个月我在 Leetcode 上大概有 4500 个左右的 commits,总共 solve 约 550 道题 (难度分布大概是 4 : 6 : 1), 11 月则是几乎全部用来巩固旧题,进行各种面试前的最后冲刺。

方法论概要
我想要给大家分享的这套方法论原理并不复杂,里面的每一点单独拎出来屏幕前的你或许都有所耳闻。但倘若想要长时间地 (三个月以上) 将它们全部贯彻, 做到收益最大化,却真的需要很强的毅力和自制力。我自己本人大概用了三年时间才慢慢地适应其节奏。我坚信, 如果你可以在四个月的时间将其执行到底,绝大部分 company 的算法轮对你而言将不再是任何阻碍。
简单来讲,它可以总结为以下 4 点:

始终保持匀速前进,既不松懈倦怠,亦不急于求成
定时归纳总结, 按类训练
善用AI实时面试工具,提升面试效率
拥抱孤独, 过滤外界杂音, 平稳心态
下面让我们逐条剖析。
Section 1: 始终保持匀速前进
对于 “每天刷多少题” 这个问题的探讨,主要分为两大流派,我姑且将它们称为 “题海流” 和 “归纳流”。 假设质量和题量的乘积为定值, “题海流” 更主张牺牲部分的质量,通过 题海战术 大量刷题, 做到以量取胜。 而 “归纳流” 则更求稳, 偏向于求质不求量,所以一天可能做不了几题,但做一题消化一题,且每做完一类题马上停下脚步投入 大量精力 进行 归纳总结。

在最开始的时候,我是 “题海流” 的忠实信徒,平均一天 8 ~ 10 道新题起步,发力最猛的时候甚至一天要做 20 道题。我不得不承认在刚开始刷题的初期,我可以明显感受到 “题海流” 给予我的强大 正反馈,每当自己看到自己的题量蹭蹭蹭上涨,那种兴奋与成就感总是溢于言表。然而,没过多久,我遍发现了一个很严重的问题: 即无论我做多少道题目,碰见新的题我大概率还是没有思路, 必须要看题解。更糟糕的是,一两周过后,即便是遇到了我之前已经做过的旧题,我可能依旧不会做。 刹那间,起初的那种缥缈虚无的 正反馈 瞬间被转化为了与其对立且强度是其数倍的 负反馈。我开始频繁地怀疑自己, “我是不是不适合学算法?”,“为什么我做了这么多题还是看不到进步?” 等诸多质疑席卷而来。最可怕的是,你会发现这是一个恶性循环,持续不断的负反馈会不断摧毁你的自信,而你不断被侵蚀的自信心则会给予你更多的负反馈。

In short, "题海流"是绝对不适合任何 长线任务 的。如果刷题备战期可以缩短到只有 7 天,这一流派或许能够起到奇效,但是绝大部分人的备战期是 3 个月甚至更久的时间。倘若你在马拉松的前 10 千米就开始冲刺了,要不了多久你就会觉得身心俱疲。因此,匀速前进就显得至关重要。

匀速前进是"归纳流"最核心的思想之一。按照我个人的经验,即便是 full-time 刷题想要快速脱产,一天的题量也绝对不要超过 5 ~ 6 题, 如果是 part-time, 标准大约减半。我个人的节奏是一般是一天 4 ~ 5 题, 早上两题,写完休息。下午再做两题,并且复习早上做的题,写完再休息。晚上只做一题或者一题都不做,利用全部时间来 复习归纳 一整天做的题 (关于为什么要将一天时间进行这样的切分以及为什么要这样复习, Section 3 会进行详细解释)。Again, 不要 greedy, 绝大部分人每天的精力是有限且平均的,你今天做的事情超标了,看似赚到了,实际上是在透支明天的自己, 你每透支一次自己,节奏就会乱一次。而节奏每乱一次,将其调整到正轨又需要大量的精力,所以从全局的角度来讲你其实是亏损的。 另外,私认为每天都能够保质地完成 4 ~ 5 题其实已经非常了不起了, 这只有很少一部分人能够长期坚持下去。 大部分人都是一周一小停,两周一大停, 而这则是非常低效的学习方法 (后文会解释)。

归纳流另外一个核心思想则是 归纳, 关于 “何时归纳” 以及 “如何归纳” 等问题我会在接下来的 Section 2 中进行详细展开 (避免本 section 篇幅过长)。

Section 2: 定时归纳总结, 按类训练
上个 section 我们从每个人每天精力守恒的角度阐述了 匀速前进 的重要性, 我们也讨论了 “题海流” 可能会带来的一些问题。 这个 section, 我们将深度讨论 归纳 二字的重要性, 它是 题海流 最缺乏的要素,也是私认为是刷题 (或者是学习任何事物) “最强大的核武器”。

通俗的讲,归纳 其实就是尝试在众多同类事物之间挖掘普遍规律,并试图利用该规律去高效地解决更多同类问题。到此,你应该能够读出进行 归纳总结 的前提条件是 先聚集特定数量的 “同类事物”。换句话说,刷题一定要同类型题目一起刷,切忌各种题型混在一起乱刷。比如,我想攻克 二分法 类题型,那么我这几天甚至这一周就应该全部做 二分法 相关的题。随着时间的推移,你会慢慢领悟到 在进行了大量针对性的同类型训练后,隐藏在事物深层的普遍规律往往会自然而然地浮出表面。倘若此时能够停下片刻,对其进行归纳和总结,我们得到的 benefit 将会是在各种题型之间盲目切换的数倍。

这里我给大家一个具体的案例: 下面这篇文章是我通过大约五天时间训练完绝大部分 滑动窗口 类型的经典题后,再用 2 天时间归纳总结的一套思维框架。运用它可以很快秒杀绝大部分该类型中档题。而那些同类型的困难题,到头来你会发现也只是基于同一框架多加了几个 components (其他框架) 而已 ,其核心思想依旧不变。
[滑动窗口真滴简单!] 闪电五连鞭带你秒杀12道中档题 (附详情解析)

对于其他题型, 比如二分法,二叉树 (前中后序),回溯等等,我采取的策略均是像这样逐一进行攻破: 即一段时间内 (一般是5 ~ 7天) 只做该类型题目, 结合其他质量高的题解以及自身的见解归纳总结出一套属于自己的框架。 我现在可以很坦诚的讲,当我从 题海流切换到 归纳流并将后者彻底实施时,我的 efficiency 至少提升了 5 个量级。与此同时, 我得到的 正反馈 (比如他人对自己的认可, 以及发现通过归纳, 自己的解题能力正不断地得到提升等等) 要远远大于 负反馈。所以我会越刷越有自信,会越刷越想去攻克更多的题,即将之前的 恶性循环 成功地转化成了 良性循环。

Section 3: 善用AI实时面试工具,提升面试效率
在当今竞争激烈的职场环境中,面试是求职过程中至关重要的一环。然而,面试准备往往耗时且充满压力。面试狗(https://interview.dog?source=csdn)是一款革命性的AI面试辅助工具,旨在通过先进的语音识别技术和最新的大模型算法,帮助求职者提升面试效率和成功率。
在这里插入图片描述

(1) 拥抱技术,提升面试准备效率 面试狗的核心优势在于其强大的AI引擎,能够实时识别面试官的问题,并迅速提供准确的回答建议。这不仅大大减少了求职者准备面试的时间,也提高了面试中的应变能力。使用面试狗,用户可以在模拟面试环境中不断练习,快速掌握各种面试技巧。
(2) 过滤信息,专注面试实战 在准备面试的过程中,信息的过滤同样重要。面试狗通过智能算法筛选出最常见和最具挑战性的面试问题,帮助用户集中精力,专注于最有价值的面试实战练习。这种针对性的准备方式,避免了在海量信息中迷失方向,确保了面试准备的高效性。
(3) 平稳心态,增强面试自信 面试狗不仅仅是一个技术工具,它还是一个心态教练。通过模拟真实的面试场景,面试狗帮助用户逐步建立起面对面试官提问的自信。当用户在模拟面试中不断取得进步,他们将更有信心地走进真实的面试房间,展现出最好的一面。
(4) 持续反馈,优化面试表现 面试狗提供的实时反馈机制,使用户能够及时了解自己在面试中的表现,并针对不足之处进行改进。这种持续的学习和优化过程,是提升面试技能的关键。

Section 4: 拥抱孤独, 过滤外界杂音, 平稳心态
遗憾的是,光有一套系统的学习 (刷题) 方法依然是不够的,如何调节自己的心态并使之始终平稳,对于跨度数月之长的备战期来说甚至显得更为重要。我平稳自身心态的办法有两点:

(1) 拥抱孤独
(2) 过滤外界杂音
这里的拥抱孤独,不是要教唆大家去成为一个孤独的人,而是想要去强调 孤独实际是人与生俱来的一种属性,我们要做的不是去逃避它,而是去接纳它。很多小伙伴在备战期间都会因为孤独感而乱了心神,必须要加入各种刷题打卡群,相互监督群才能放心。然而这种 “放心” 本质上却是虚假的,不可靠的。我起初的时候也加了很多各式各样的群,削尖脑袋试图 “融入” 某个群体从而得到特殊的庇护,但到头来只会发现绝大部分的这种群除了带来无谓的焦虑外,很难起到丁点正面作用。直到后来方才发现自己的孤独感反而可以有效利用成为自身最强大的武器。

对于做算法题这种需要投入大量精力去思考的 task 而言,独立思考的能力往往大于一切。对于之前介绍的 归纳法 而言更是如此,你更多需要倾听的是自己内心的声音,你想要总结的也是那些属于自己的思维框架。这通过把希望寄托于各种陌生人刷题群是很难实现的。然而, 我并非暗示大家不要去学习他人的东西。事实恰恰相反,别人好的题解,好的文章我们更要认真的去研读,这就和做发明一样,很多伟大的发明实际上都是基于前人的方法上加以改进而得出的,但这丝毫不影响它们的伟大。因此,我想要表达的是希望大家不要从主观意识上抗拒自身的孤独感并不断地寻找庇护。你不需要任何庇护,至少对刷算法题这件事而言,倘若你能运用好 Leetcode 社区提供的资源,不断强大自身的毅力和信心,再配合使用本文介绍的学习论,你已经完全具备打败它的一切潜质。

拥抱孤独的另外一个好处就是可以帮助我们 过滤外界杂音。在之前长达四个月的备战期间,我曾选择近乎彻底地不再登录自己的微信以及各大社交平台。其目的只有一个,那就是抗噪。 没错,我们不得不承认互联网给当今这个社会带来了种种便利,但也不得不承认如今的互联网是聒噪的,各种社交平台尤甚。里面充斥着各种散播焦虑,攀比和凡尔赛的言论,以及花样繁多的各种洗脑广告和文章。稍有不慎,你就会被 “污染”,你就会潜意识地跟着大众做那些大众认为正确的事情, 而丧失了自己独立思考的能力。别人买房,不代表你也要买房; 别人买车学车,不代表你也要买车学车; 别人炒股,不代表你也要炒股; 别人做任何他们想做的事情都跟你无关,老天赐予你的原本是一个独特而有趣的灵魂,但当有一天你的意识被你口中的 “别人” 所左右之时,你最宝贵的 独特性也将不复存在。

因此,不要再沉迷于各种 伪群体, 伪社区, 洗脑短视频 之间,最好的方式就是离开它们,或者有效控制它们,从而捍卫你的初心。那么什么样的状态或者是心态可以称之为平稳呢?私认为只要你可以做到 长时间地保持一个节奏,贯彻一个方案,不因取得阶段性成就而大喜,亦不因遭受阶段性挫折而大悲,心静如水,那么你离你的目标就真的不再遥远了。

结尾
以上就是我想要分享给大家的全部内容。人生苦短,能在有限之人生长期坚持一件事情并将其做好实属不易。刷题之路长路漫漫,我真诚的希望大家能够稳住自己的心态,隔离外界的干扰,用最科学和最高效的方法去学习,当你未来回首之际,你将会发现自己从中受益无穷。马上暑假就要来临了,下一届秋招早已迫在眉睫,各位朋友们,倘若此时不动,敢问各位又更待何时呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/613282.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙OpenHarmony开发板解析:【系统能力配置规则】

如何按需配置部件的系统能力 SysCap(SystemCapability,系统能力)是部件向开发者提供的接口的集合。 开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 部件配置系统…

Received Signals.SIGHUP death signal, shutting down workers

单机多卡训练大模型的时候&#xff0c;突然报错&#xff1a; 3%|▎ | 146/4992 [2:08:21<72:57:12, 54.20s/it][2024-05-10 13:27:11,479] torch.distributed.elastic.agent.server.api: [WARNING] Received Signals.SIGHUP death signal, shutting down workers [2…

Java转Kotlin调用JNI方法异常

一、背景 Java调用JNI方法时没有任何问题&#xff0c;但是使用Java转Kotlin以后出现了崩溃异常&#xff1a;A java_vm_ext.cc:597] JNI DETECTED ERROR IN APPLICATION: jclass has wrong type: 校验参数后没有任何变化&#xff0c;经过分析验证找到解决方案 二、原因…

Java入门基础学习笔记16——运算符

package cn.ensource.operator;public class OperatorDemo1 {public static void main(String[] args) {// 目标&#xff1a;掌握基本的算术运算符的使用int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b); // 20System.out.…

4步快速配置Java、MySQL、Maven环境(windows)

每次入职一家新公司或者用一台其他的临时电脑或者新电脑时都要重新配置Java开发环境&#xff0c;很麻烦&#xff0c;因此我在这里记录一下快速配置环境的方式&#xff0c;四步搞定&#xff01;此处以win为操作系统进行讲解。 第一步&#xff1a;下载链接 下载链接&#xff1a…

【半夜学习MySQL】数据库中的数据类型(含数值类型、文本二进制类型、时间类型、String类型详谈)

&#x1f3e0;关于专栏&#xff1a;半夜学习MySQL专栏用于记录MySQL数据相关内容。 &#x1f3af;每天努力一点点&#xff0c;技术变化看得见 文章目录 数据类型分类数值类型bit类型tinyint类型int类型float类型decimal类型 文本、二进制类型char类型varchar类型 时间类型Strin…

51单片机入门:串口通信

串行通信的初步认识 通信方式分类 1、按照数据传送方式&#xff1a; 并行通信&#xff1a;通信时数据的各个位同时传送&#xff0c;可以实现字节为单位的通信。 但是通信线多&#xff0c;占用资源多&#xff0c;成本高。 串行通信&#xff1a;一次只能发送一位&#xff0c…

机器学习-Numpy

机器学习-Numpy 如果一个人拒绝提高自己的思想觉悟&#xff0c;那么他只能处在弱小、可怜、凄惨的境地。 目录 机器学习-Numpy 1.Numpy&#xff1a;生成矩阵 做矩阵运算 1&#xff09;创建矩阵 ①使用列表创建 ②使用元组创建 2&#xff09;矩阵取值 3&#xff09;numpy…

【栈】Leetcode 字符串解码

题目讲解 394. 字符串解码 算法讲解 这道题有四种情况&#xff1a;1.遍历的时候遇到数字&#xff0c;我们计算并保存数字&#xff0c;将它加入到数字栈中&#xff1b;2.遍历的时候遇到[&#xff0c;我们就把字符保存&#xff0c;加入到字符栈中&#xff1b;3.当遇到]&#x…

全栈开发之路——前端篇(9)插槽、常用api和全局api

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

【2024亚马逊云科技峰会】Amazon Bedrock + Llama3 生成式AI实践

在 4 月 18 日&#xff0c;Meta在官网上公布了旗下最新大模型Llama 3。目前&#xff0c;Llama 3已经开放了80亿&#xff08;8B&#xff09;和700亿&#xff08;70B&#xff09;两个小参数版本&#xff0c;上下文窗口为8k&#xff0c;据称&#xff0c;通过使用更高质量的训练数据…

HTML实现3D相册

目录 写在前面 HTML简介 完整代码 代码分析 注意事项 系列推荐 写在最后 写在前面 本期小编给大家推荐一个炫酷的3D相册&#xff0c;可以更换照片哦&#xff0c;一起来看看吧~ HTML简介 HTML&#xff0c;即HyperText Markup Language&#xff0c;是一种广泛应用的超文…

扩展van Emde Boas树以支持卫星数据:设计与实现

扩展van Emde Boas树以支持卫星数据&#xff1a;设计与实现 1. 引言2. vEB树的基本概念3. 支持卫星数据的vEB树设计3.1 数据结构的扩展3.2 操作的修改3.3 卫星数据的存储和检索 4. 详细设计和实现4.1 定义卫星数据结构体4.2 修改vEB树节点结构4.3 插入操作的伪代码4.4 C语言实现…

GPIO输出速度(ARM-GD32)

单片机输出速度对GPIO硬件的影响 如果T为100ns 那么2/3*100ns 67ns 那么tr tf 38 ns &#xff08;也就是不能超过32ns&#xff09; tr 和tf和什么东西有关如何去控制 CL 是一个电容&#xff0c;电容会改变和影响电压变化的速率&#xff0c;输出高低电平也就是对电容进行充电…

【DDR 终端稳压器】Sink and Source DDR Termination Regulator [A]

Sink Source 这两个词被翻译的有点混乱了&#xff0c;有点“输入”“输出”的意思&#xff0c;但是还是不准确&#xff1b; 1 Sink 去到英英词典看看&#xff0c;母语是怎么介绍的吧。 to go down below the surface or towards the bottom of a liquid or soft substances…

uniapp 版本检查更新

总体来说uniapp的跨平台还是很不错的&#xff0c;虽然里面各种坑要去踩&#xff0c;但是踩坑也是开发人员的必修课和成长路。 这不&#xff0c;今天就来研究了一下版本检查更新就踩到坑了。。。先来看看检查更新及下载、安装的实现。 先来看看页面&#xff1a; 从左到右依次为…

了解 条码工具 Dynamsoft 在条码读取器中的形态运算

在图像处理中&#xff0c;术语形态学是指分析形状以填充小孔、去除噪声、提取轮廓等的一组操作。形态学操作很像空间卷积中的过滤过程。有两个部分在起作用&#xff1a;结构元素和预定义的计算规则。 点击下载Dynamsoft最新版https://www.evget.com/product/3691/download 结…

块元素、内联元素、行内块元素

一、介绍&#xff1a; CSS元素划分成块元素、行内元素&#xff08;内联元素&#xff09;、行内块元素等多种常用类型。也就是说&#xff1a;在CSS中&#xff0c;元素根据其在页面上的布局方式被分为不同的显示类型。 背景&#xff1a;HTML负责定义网页的结构和内容&#xff0c…

YOLO系列笔记(十四)——Compute Canada计算平台及其常见命令介绍

Compute Canada平台及其常见命令介绍 前言优势使用方法1. 检查模块不带版本号带版本号 2. 加载模块3. 检查模块是否加载成功4. 创建虚拟环境5. 编写作业脚本6. 提交作业7. 监控作业状态8. 查看作业开始预计时间9. 查看作业的详细输出10. 取消作业 注意结语 前言 大家好&#x…

hypack如何采集多波束数据?(上)

多波束设备有3种&#xff1a;多波束阵列&#xff0c;比如Seabat T50P&#xff1b;相干声纳&#xff0c;比如EdgeTeck 6205&#xff1b;多个单波束并列&#xff0c;比如Ross Sweep System&#xff0c;见下图。 辅助传感器主要有&#xff1a;罗经&#xff08;提供航向&#xff09…