负雪明烛」公众号是负雪明烛维护的一个算法题解公众号,致力于帮助大家刷题、找工作。欢迎关注。

大家好,我是负雪明烛。今天跟大家聊一聊「LeetCode应该怎么刷?」这个话题。

我是大二的时候开始接触 LeetCode 的,那时候 LeetCode 只有 400 题,我本来打算每天做 1 个题,但是由于当时觉得题目太难没坚持下去。在大四考研后和研一研二的两年左右的时间,我刷了 800 多道题(现在已经900多),并且大多数题目做了 2~3 遍。那么我是怎么做到的呢?

一、入门篇

1. 刷题姿势

刚开刷 LeetCode 时遇到二叉树翻转,想了一天也没明白,当时无比痛苦。因为我的方法不对,我总想着在脑子里面想明白再写,在白纸上不停地模拟二叉树树翻转的每一步,还想着用本地 IDE 写个二叉树结构进行Debug,现在看来都是走了弯路。

大部分新手应该是只学过课本上的一些数据结构和算法的知识,还没有实际刷题经验,因此非常痛苦。

对于新人而言,不应该自己死抠一个题目,如果想了一会没有任何思路,就应该果断看别人怎么写的。在理解了别人的做法之后,再凭理解和记忆在 LeetCode 的代码框里敲一遍。

学习 = 学 + 习。知识是学出来的,不是在自己脑子里蹦出来的;学过之后,还要自己动手练习。新手要勇敢地、经常地学习别人的解法和答案,然后凭理解敲代码练习。只要度过刷题初期的痛苦,后面就会越刷越快。

2. 基础知识

需要掌握常用的数据结构和算法的思想和适用场景。

学习基础知识,我推荐 《算法(第4版)》。这个书不用全部细看,可以只看重点,比如前面的 Java 知识不用看,数学推导部分可以不用看。

再推荐一本侯捷的 《STL源码剖析》,这本书对理解C++ STL有重大帮助,看了之后绝对会对数据结构和算法有更深的理解,我看完这本书之后感觉相见恨晚啊。

3. 刷题顺序

合理的刷题顺序能降低难度,帮助我们在有限的时间里获得最快的成长。

LeetCode 现在将近 2000 道题,基本没有人能够全部刷完,而且对于参加面试者来说也没有必要刷特别多的题。许多人在面试前刷了 200 道题,基本够了;准备更充分的人,大概会刷 400 道题;能刷 600 道题目以上的,基本上国内公司的 Offer 都能收获到一大堆。

我推荐的刷题顺序的规则是:

  • 按分类刷;每个分类从 Easy 到 Medium 顺序刷;
  • 优先刷 树、链表、二分查找、DFS、BFS 等面试常考类型;
  • 优先刷题号靠前的题目;
  • 优先刷点赞较多的题目;

如果基本上能做到 Easy 题 100% 能做对,Medium 题经过思考或与面试官交流后能做对,基本就能拿到 Offer。在实际面试过程中,很少出 Hard 题,视能力刷。

4. 跟别人学习

向别人学习是非常必要的。

1)看别人的题解

主要看别人在解决这个题目的思路是什么。无论这个题你会不会,都要看下别人的解法,或许有新收获。

推荐的博客作者有:

  • 负雪明烛:5 年在 CSDN 上更新了 800多道题解,收获 160万 阅读。在中文力扣日更题解。
  • 李威威:中文力扣的大 V,对力扣题目掌握很全面,写得题解非常详细,对题目举一反三。
  • 花花酱:基本每个题都有博客和视频,强烈推荐看他的视频。
  • Grandyang:在博客园更新了几乎所有力扣题目,收获了 1200万 阅读。

最近我在刷中文版的力扣,题解区的答案质量非常高。比较推荐的博主有:力扣官方题解,负雪明烛,李威威,zerotrac,Krahets,笨猪爆破组,甜姨

我恬不知耻地推荐一下自己(负雪明烛)的题解,我最近已经连续在中文力扣日更「每日一题」题解 20 天。最近利用动图帮助大家理清做题思路,点赞和阅读数都比较高。

除了题解区以外,如果想看博客上面的题解,可以用搜索引擎搜题目和博主名。想看负雪明烛的「two sum」题解,那么搜索方式就是在关键词之后加上「fuxuemingzhu」:

2)看别人的总结

这部分包括算法讲解、套路整理、刷题模板等。

「算法题 = 思路 + 模板」,思路需要通过看别人的解答以及讲解获得,模板就是做题的套路,既可以自己总结,也可以看别人总结好的。

比如负雪明烛的【LeetCode】代码模板,刷题必会

也比如说 AlgoWiki

当然推荐每个人在做题的过程中都整理一份自己的总结,用自己的方式总结好知识点和模板。

5. 做好笔记

写作过程能更好地帮助我们理清思路,也能帮助我们再做此题时快速想起以前的做法,还能见证我们自己的成长。

在五六年前我刚开始刷题时,就把每个做过的题目记录在CSDN上,现在我的博客浏览量已经将近 161万 了。

任何题,无论难度,我都记录题目、想法、代码。虽然经常写博客的时间比写题的时间还多,但是把自己的想法讲解一遍才是真的懂了,更方便了自己之后看、以及大家交流。经常看到自己几年前写的愚蠢代码,然后感叹自己确实有进步了。

在 B站 有个小姐姐讲了小白如何上手LeetCode,也演示了如何用 iPad 做笔记,值得一看。

程序媛分享 | LeetCode小白如何上手刷题?iPad学习方法 | 刷题清单 | 新手指南 | 刷题找工作 | IT类

6. 交流和监督

刷题最大的障碍是自己。特别是新手,很可能由于刚接触 LeetCode 感觉太难就没有毅力坚持下去,导致半途而废。而且,刷题更重要的是坚持,做题的感觉都需要手感进行保持的。

所以,如果能有个组织交流和监督就好了。

我组织了「每日一题交流群」的活动,并且做了个网站 https://ojeveryday.com 来监督大家打卡。在网站上提交力扣个人主页就能进群,群里的规则是每天同步力扣的每日一题,然后大家交流做法。群里还会组织模拟面试、周末直播讲题等活动。由于进群前需要提交自己的 LeetCode 个人主页,并且群主管理严格,所以群里没有任何广告。刷题群已经持续将近一年,欢迎大家加入。

事实证明这种大家一起做同一道题目,并且一起交流讨论的氛围非常好。

二、提高篇

如果你已经过了小白的阶段,那么应该做些提高项目。

1. 周赛

所谓周赛,就是每周日上午,LeetCode 组织的一场比赛,总共 4 道题,一般是 Easy 一道,Medium 两道,Hard 一道。中英文网站同时开始,题目相同。每隔一个周六晚上有双周赛,题目和周赛类似。往届竞赛也可以点击参加做练习模拟。

做周赛的目的是检验我们的学习成果,毕竟这些题目都是新的,就像考试一样。

不要担心自己做不出来,只要尽力而为就好了,我一般的目标是解决前三道,第 4 道 Hard 做不出来也没有心理负担。

参加完比赛之后,看下别人的解答,因为这几个题目都是自己苦思冥想过的,因此学习和进步地都挺快。

我最好的一次周赛成绩是全球 28 名,当看到自己的 id 显示在了全球排名的第一页,我非常兴奋,开心了一整天。

2. 模拟面试

对于大多数人来说,刷题的目的是找工作,那最终就要参加面试。一个人做题的过程是缺乏交流的,实际面试中会有交流互动。因此,推荐在面试前参加一下模拟面试。

另外,哪怕不参加模拟面试,给别人讲一下做题的思路和代码的实现过程也是大有裨益的。

需要参加模拟面试的也可以进「每日一题交流群」,我邀请了力扣全站排名第一的 storm 来做模拟面试官。

三、最后

上文总结了我想到的「LeetCode应该怎么刷?」的方法,最重要的还是坚持二字。做时间的朋友,努力付出就一定有收获。如果觉得刷题困难,就多多学习,多多交流,不要半途而废。

最后,希望大家都能够通过刷 LeetCode 获得成长,拿到自己满意的 Offer。

期待你的点赞、关注、分享

欢迎加入刷题群

目前已经近 2000 人加入了每日一题打卡群。加入方式是通过每日一题打卡网站,该网站每天都会同步力扣每日一题,这是个互相帮助、互相监督的算法题打卡网站,其地址是 https://www.ojeveryday.com/

想加入千人刷题群的朋友,可以打开上面的链接地址,然后在左侧点击「加入组织」,提交力扣个人主页,即可进入刷题群。期待你早日加入。

关于作者

我是本文的作者是负雪明烛,毕业于北京邮电大学,目前就职于阿里巴巴。坚持刷算法题 5 年,共计刷了 800 多道算法题。做过的每个算法题都在 CSDN 上写题解博客,获得好评无数,CSDN 的累计阅读量已经 161万 次!博客地址是:https://blog.csdn.net/fuxuemingzhu

2021 年 2 月 13 日 负雪明烛 更新于 北京。

刷完 900 多题后的首次总结:LeetCode 应该怎么刷?的更多相关文章

  1. MySQL 5.7 安装完成后,首次登陆的几个问题

    Server:CentOS 7.0 MySQL : 5.7.20 MySQL Community Server (GPL) 1.首次登陆后修改密码: 根据安装时的选择不同,有mysqld_safe用m ...

  2. HDU 6406 Taotao Picks Apples & FJUT3592 做完其他题后才能做的题(线段树)题解

    题意(FJUT翻译HDU): 钱陶陶家门前有一棵苹果树. 秋天来了,树上的n个苹果成熟了,淘淘会去采摘这些苹果. 到园子里摘苹果时,淘淘将这些苹果从第一个苹果扫到最后一个. 如果当前的苹果是第一个苹果 ...

  3. 解决Flutter boost模块化加入到原有android项目后,首次加载过慢的问题

    由于Flutter boost目前还没有很好的解决方案,所以只能魔改了,大致的思路就是在刚打开app的时候就初始化一个不可见的Flutter页面,让其自动注册&初始化. 先编写一个Flutte ...

  4. 边工作边刷题:70天一遍leetcode: day 1

    (今日完成:Two Sum, Add Two Numbers, Longest Substring Without Repeating Characters, Median of Two Sorted ...

  5. 边工作边刷题:70天一遍leetcode: day 78

    Graph Valid Tree 要点:本身题不难,关键是这题涉及几道关联题目,要清楚之间的差别和关联才能解类似题:isTree就比isCycle多了检查连通性,所以这一系列题从结构上分以下三部分 g ...

  6. 边工作边刷题:70天一遍leetcode: day 79

    3Sum Smaller 要点:类似的题还有lintcode的triangle count:https://github.com/delbao/onlineJudge/blob/master/lint ...

  7. 边工作边刷题:70天一遍leetcode: day 82-1

    Closest Binary Search Tree Value II 要点:通过iterator,把closest值附近的k个closest找到,从而time降为O(klgn) in order i ...

  8. 边工作边刷题:70天一遍leetcode: day 84-2

    要点:这题是combination的应用,从左向右想比从右向左容易. 因为有结果从小到大的要求,暗示用combintion而不是permutation 其实就是从小到大验证因子,每个因子和其对称因子立 ...

  9. 边工作边刷题:70天一遍leetcode: day 85-4

    Walls and Gates 要点: 同样是bfs,这题可以用渲染的方法(即全部gate进初始q),注意区别Shortest Distance from All Buildings.那道题要找到某个 ...

随机推荐

  1. windows下typora图片自动上传到图床(附带腾讯云教程)

    目录 1. 背景 2. 在Typora中使用 3. 安装 3.1 安装教程环境说明 3.2 安装步骤 3.3 配置图床 3.3.1 插件配置 3.3.2 腾讯云参数获取 3.3.2.1 新建子用户,获 ...

  2. mysql—将字符型数字转成数值型数字

    今天写sql语句时,相对字符串类型的数字进行排序,怎么做呢? 需要先转换成数字再进行排序 1.直接用加法 字符串+0 eg: select * from orders order by (mark+0 ...

  3. Jumpserver堡垒机容器化部署

    JumpServer 是符合 4A 的专业运维安全审计系统. 前提条件 已部署docker Jumpserver 对外需要开放 80 443 和 2222 端口 服务器.数据库.redis 等依赖组件 ...

  4. day11 函数

    day11 函数 一.函数基础 """ 1 什么是函数 函数是盛放代码的容器:把实现某一功能的代码放到一个函数内就制造一个工具 2 为何要用函数 没有用函数之前程序的问题 ...

  5. MYSQL获取更新行的主键ID 【转】

    在某些情况下我们需要向数据表中更新一条记录的状态,然后再把它取出来,但这时如果你在更新前并没有一个确认惟一记录的主键就没有办法知道哪条记录被更新了. 举例说明下: 有一个发放新手卡的程序,设计数据库时 ...

  6. 【leetocode】55. Jump Game

    You are given an integer array nums. You are initially positioned at the array's first index, and ea ...

  7. 【leetcode】212. Word Search II

    Given an m x n board of characters and a list of strings words, return all words on the board. Each ...

  8. CentOS6+nginx+uwsgi+mysql+django1.6.6+python2.6.6

    1.配置网关 #vi /etc/sysconfig/network NETWORKING=yes(表示系统是否使用网络,一般设置为yes.如果设为no,则不能使用网络,而且很多系统服务程序将无法启动) ...

  9. YonBuilder低代码开发实践:4行代码实现跨实体列表数据同步

    提到增.删.改.查等数据维护,后端开发者们再熟悉不过了.传统的数据维护通过操作数据库的方式实现,步骤比较繁琐,需要通过Java代码实现数据库链接,然后编写SQL语句.编写实体,将想要的数据存到相应的数 ...

  10. Table.Range保留中间指定的….Range/Middle(Power Query 之 M 语言)

    数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...