专栏首页编程拯救世界我是如何刷 LeetCode 的?

我是如何刷 LeetCode 的?

我大约是从 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

本文分享自微信公众号 - 编程拯救世界(CodeWarrior_),作者:江不知

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 图解精选 TOP 面试题 003 | LeetCode 344. 反转字符串

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

    江不知
  • 《Head First 设计模式》学习笔记 | 策略模式

    我最近在看大名鼎鼎的《Head First 设计模式》。这本「OO 圣经」用 Java 实现各类设计模式,对于我 —— 一个非 Java 爱好者而言,读起来并不...

    江不知
  • 谈谈堆与栈:数据结构和内存角色

    堆包含一个链表来维护已用和空闲的内存块。在堆上新分配(用 new 或者 malloc)内存是从空闲的内存块中找到一些满足要求的合适块,这个操作会更新堆中的块链表...

    江不知
  • 构建实战机器学习系统的10点经验(二)

    用户1737318
  • HTML基础

    一 html html结构 ? !DOCTYPE html> 告诉浏览器使用什么样的html或者xhtml来解析html文档 <html></html>是文档的...

    用户1214487
  • 机器学习并不难

    在这篇文章中,我们将讨论一般情况下的机器学习的方法以及其与数据库之间的交互途径。如果你是一个不知从何开始学起的初学者,有兴趣知道到底为何我们需要机器学习,并且疑...

    人工智能资讯小编
  • Facebook团队提供视频教程:机器学习指南

    Facebook机器学习指南是由Facebook机器学习团队开发的视频系列,由六部分组成。该系列分享了现实世界实践,提供了如何将机器学习功能应用于实际问题的实用...

    AiTechYun
  • EasyUI日期时间框DateTimeBox

    达达前端
  • 机器人参加高考数学22分钟拿105分,究竟怎么做到的?

    AI 研习社按:2017 年高考刚刚结束,据相关媒体报道,7 日下午,在没有网络和题库支持的情况下,一个名为 Al-Maths 的机器人在 22 分钟内完成了文...

    AI研习社
  • AAAI2019《图表示学习》Tutorial, 180 页 PPT 带你从入门到精通(下载)

    图表示学习,是 2018 年火爆全球的一个深度学习方向,从以 Line, meta-path 等为首的节点表示学习,到以 GCN,GraphSAGE,为首的图卷...

    新智元

扫码关注云+社区

领取腾讯云代金券