前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我是如何刷 LeetCode 的?

我是如何刷 LeetCode 的?

作者头像
江不知
发布2019-12-12 15:48:10
1.5K0
发布2019-12-12 15:48:10
举报
文章被收录于专栏:编程拯救世界编程拯救世界
我大约是从 2018 年 12 月份开始做题,2019 年 3 月基本稳定「每日一题」,目前完成 309 题,这两周因为忙自己的私事又有些躲懒了。(捂脸逃

我的 LeetCode 提交记录

虽然我是软件工程专业毕业的,但是由于大学的时候一门心思在应用开发身上,「算法与数据结构」这门课重要的课程我并没有学好。所以开始刷 LeetCode 的时候我完全就是「入门小白」一个。

对于一个小白来说,会经历几个痛苦的阶段:

  1. 拿到一道题(或许就是道 Easy 题),完全没有思路
  2. 好不容易有思路了,却是最笨的解法,甚至有时直接超时
  3. 做了一段时间题,(误)以为自己变强了,于是参加周赛,结果被大佬们摁在地上摩擦……

这几个痛苦的阶段很难度过,并且非常打击人的自信心。结合我近一年的刷题感受,我觉得对于刚起步的小白而言,最重要的还是从刷题的过程中获得足够的自信心和满足感

下面是我建议的刷题步骤:

按标签做题

刚起步时,建议先做简单的、特定标签下的题。

LeetCode 有提供一个标签分类列表:

LeetCode 题库页面右侧的标签分类列表

你可以按照自己喜欢的顺序来选择标签做题。例如先做数据结构相关的题,比如数组、字符串、链表等;然后再做算法相关的题,比如二分、动态规划、广搜、深搜等。

这里推荐一个网站 OI Wiki[1],上面包含了编程竞赛中的基础知识、常见题型、解题思路以及常用工具等,内容非常详尽。可以先在该网站上复习某个知识点,然后再前往相关标签刷题,配合食用更健康~

没有思路的处理方法

这个时候往往会怀疑人生,特别是你手上拿着一道 Easy 题的时候。

我们要知道,如果一道题不是变态难度,我们却对它没有任何思路,这往往是因为:你还没有形成自己的解题框架

而这种解题框架的形成,需要大量的题目来支撑

说白了就是:你还刷得不够多啊少年人

所以刚起步的时候对一道题完全没有思路是可以理解的,也没有必要感到难过和自卑。如果没有思路,那就去看题解吧!

当然,看完解答你还要做以下这些事:

  1. 理解题解的内容
  2. 关掉题解,自己用代码实现一遍
  3. 把这道题放入自己的小本本里,等待下次复盘,下次复盘的时候就不要再看答案啦

这样一来,即便是通过看题解完成的题目,你也加入了自己的思考和行动,题目 AC 的时候也会给自己带来满足感。

跳出标签

按标签刷了足够多的题以后,你已经大概拥有一个特定类型的解题框架了,即知道什么样类型的题目该用什么套路做。

不过这个解题框架还在特定的标签下。比如你在动态规划标签下做题,那么你拿到题之前就会知道这题要用动态规划来做。这样当然是不行的,你去面试人家才不会告诉你面试题的类型,你要自己去思考发现。

所以,我们要做的就是跳出标签,自己去随机找题做,在不知道题目类型的情况下靠自己去解决这道题

探寻最优解

当你摆脱标签的束缚并且做了足够多的题以后,你再拿到一道题的时候,眼前就会自然而然地浮现出这道题的考点和解决套路(是的就是这么魔幻)。也就是说,你已经形成了自己的解题框架了

然而这还远远不够!

一道题往往不会只有一种解法,而你想到的方法往往也不是最优解

当你已经能 AC 大部分题目、在刷题上找到自信后,是时候出发去探寻这些题目的最优解了!

在这个过程中,你会慢慢地:

  • 对题目的数据范围开始敏感
  • 开始在意算法的复杂度
  • 感叹真理的美妙

分享出去

明白一个知识点或许很简单,但要把它清楚、明白地讲给别人听却不那么容易。这要求你把知识点揉碎、吸收、完全理解,成为自己的一部分,然后才能流畅地输出给别人。

所以,验证你是否已经完全理解一道题的方式很简单,就是把它的题解写下来

我一直坚持在 LeetCode 的评论区和题解区输出题解,现在我已经把它整理到 GitHub 上,以此督促自己不断更新。

我还在探寻最优解的阶段徘徊,希望各位大佬前来指点一二:JalanJiang/leetcode-notebook[2]。

参加周赛

LeetCode 每周天都会举办一次周赛,每两周的周六晚会举办一次双周赛。周赛的模式和面试比较接近,题目的未知性和时间的限制会给人紧迫感。

如果你觉得你已经掌握了大部分解题套路,你就可以参加周赛练练手了。周赛的排名机制也会督促着你不断变强!

刷题小贴士

不要过分追求题量,而要追求做题的质量。当你刷完一道题后不妨问问自己:

  • 是否已经完全理解了题目的解法?
  • 是否知道题解的复杂度?
  • 题目是否还有更优的解法?
  • 下次再遇到这道题我还会做吗?

大家在刷题中肯定会遇到各种各样的负面情绪,比如觉得自己进度太慢、不够聪明等等。但是要知道,知识的积累本来就是个漫长的过程,走得慢一些又何妨呢?只要方向是对的,我们终将走得很远

References

[1] OI Wiki: https://oi-wiki.org/ [2] LeetCode 题解 GitHub 仓库: https://github.com/JalanJiang/leetcode-notebook

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拯救世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 按标签做题
  • 没有思路的处理方法
  • 跳出标签
  • 探寻最优解
  • 分享出去
  • 参加周赛
  • 刷题小贴士
  • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档