数据结构和算法|LeetCode 的正确使用方式


文章目录

  • LeetCode 的题库使用方式
    • 做题方式
    • 如何做题
  • LeetBook
  • 竞赛
    • 竞赛题目难度分布
    • 竞赛结果和复盘
    • 竞赛目标

LeetCode 的题库使用方式 LeetCode 的题库是很庞大的。面对庞大的题库,只有正确使用才能达到最好的效果。
做题方式 常见的一种做题方式是:按照题号顺序依次做题。这种做题方式并不好,因为 LeetCode 的题目顺序并没有特定含义,既不是按照难度排序,也不是按照知识点排序,如果按照题号顺序做题,则每道题的难度和知识点都没有关联性,做题效果是不好的。
还有一种做题方式是:按照难度从低到高的顺序做题。这种做题方式比上一种做题方式好,但也不是最好的做题方式。前期做的都是难度低的题目,可能都会做,一旦做到难度高的题目就不会做了,这种做题方式没有对专门的知识点进行针对性的练习,效果也不是最好。
什么样的做题方式是最好的呢?做题需要和知识点的学习结合,因此应该一段时间练习特定知识点的题目。LeetCode 有标签功能,每个标签都关联特定的知识点,可以在题库页面按照标签筛选题目,做同一个标签下的题目,就是对同一个知识点的题目进行练习。
如何做题 LeetCode 的题目有不同的难度,难度低的题目可以很快想出解法,提交通过,难度高的题目则可能无法想出时间复杂度足够低的解法,甚至完全没有思路。对于会做和不会做的题目,应该如何做题呢?
对于会做的题目,应该自己写代码实现算法。如果提交通过,则说明实现是正确的。提交正确之后并没有结束,同一道题目可能有多种解法,也可能有更优的解法,因此需要参考其他人的解法。其他人的解法可以在国服的题解区以及世界服的讨论区看到,高票题解通常是质量高的题解。国服的「力扣官方题解」发布的官方题解通常有很大的参考价值,官方题解一定包含复杂度最优的解法。
如果自己写的代码没有提交通过,则应该首先自己排查错误,发现错误原因然后改正,提交通过之后再参考其他人的解法。
如果遇到难题,无法想出时间复杂度足够低的解法,甚至完全没有思路,很多人的做法是死磕到底,花几个小时做一道题。其实,这种做法是非常不可取的,不会做的题目即使想几个小时,也未必就会做,即使想了几个小时之后确实想出了提交通过的解法,也花费了大量时间,想出的解法也未必是最优解法,这样的做题效率是很低的。
正确的做法是,规定一个思考的时间上限,可以是 5 分钟或 10 分钟,最多不超过 15 分钟,如果有思路就写代码实现,如果没有思路,或者发现代码无法提交通过,则不应继续死磕,而是应该直接看题解。看题解的目的是理解题目的解法,为了达到目的,应该首先记忆题解的思路和代码,然后尝试理解,最重要的是过遍数。
LeetBook LeetBook 是 LeetCode 的另一个功能,可通过学习页面进入。
LeetBook 的内容颇为丰富,以数据结构和算法为主,也有别的方面的内容,是很好的学习资源。
对于数据结构和算法,如果没有基础,建议先在 LeetBook 进行学习,然后进入题库页面做题,对知识点有一定了解之后,做题的效果更好。
竞赛 在学习和做题一段时间之后,可以参加竞赛,检验训练的成果。
季赛的平均难度高于主站题目,且一年只有两次,因此参加竞赛应该以周赛和双周赛为主。
竞赛题目难度分布 周赛和双周赛的比赛时长是 90 分钟,包括 4 道题,每道题的难度情况大致如下:
  • 第 1 题考查数据结构和算法的基础概念,只要对相应的知识点有所了解即可做出;
  • 第 2 题考查数据结构和算法的简单使用,在理解相应的知识点的基础上可以做出;
  • 第 3 题考查数据结构和算法的深入理解,有一定难度,要求对相应的知识点有充分的掌握;
  • 第 4 题考查数据结构和算法的应用,或综合考查多个知识点,难度一般明显高于前 3 道题。
竞赛结果和复盘 对于新手而言,竞赛题全都不会做或者只做出第 1 题是很正常的。和平时做题不同,竞赛有时间限制,没有题解和提示,因此必须在有限的时间内独立完成题目。竞赛题没有正确作答,原因可能是知识点的掌握不够,或者时间复杂度过高导致超时,也可能是读题不仔细或者思路错误。平时做题可能会忽略这些问题,在竞赛时就可能暴露出平时忽略的问题。
除了做出的题目数量以外,做题速度也非常关键。在两位选手的得分相同的情况下,用时不同,排名也可能相差几百名,因此,在训练的过程中也要重视做题的熟练度。
在竞赛中取得好成绩需要多方面的因素,除了实力以外,心态也很重要,良好的心态有助于正常发挥,而不好的心态会导致思路受限,轻则用时更多,重则会做的题目未能在竞赛时做出。
在有条件的情况下,应该坚持参加竞赛。即使刚开始参加竞赛时的成绩不理想,随着做题数量的增加和参加竞赛的场次的增加,竞赛成绩也可以提升。
竞赛目标 竞赛的前 3 道题的难度有限,在经过长期的训练之后是可以达到做出前 3 道题的实力的,而第 4 题可能很难,有时候会超过大多数面试的要求,因此,对于大多数人而言,竞赛的目标应该是确保每次都能做出前 3 道题。这个目标可以分解成若干较小的目标:
  1. 对于初学者,目标为首先做出第 1 题,然后做出前 2 题;
  2. 对于有一定基础的选手,目标为前 2 题保证时间和正确率,然后做出前 3 题;
  3. 对于实力较强的选手,目标为前 3 题保证时间和正确率,名次稳定在前 200 名;
  4. 对于实力更强的选手,目标为前 3 题保证时间和正确率,争取做出第 4 题,名次进入前 100 名。
【数据结构和算法|LeetCode 的正确使用方式】虽然每次竞赛题目的难度分布大致相同,但是不同场次竞赛的题目难度仍然会有差异。有些场次的第 4 题的难度明显偏低,甚至还达不到另一些场次的第 3 题的难度,做出全部 4 题的选手可能多达几百人。有些场次的第 4 题的难度很高,做出第 4 题的选手可能只有几十人,做出前 3 题且用时足够短的情况下也可能进入前 100 名。因此,更应该注重名次,而不是做出多少题和花了多少时间。

    推荐阅读