LeetCode的使用方法

LeetCode 是一个上提供一系列的算法题,并且具备多种编程语言优秀在线编辑体验。在这样的基础之上,LeetCode 对于各类题目的描述简洁易懂,题库更新极快,最重要的是它的含金量受到大众的认可,拥有庞大的用户群体,对于每一道算法题基本能够寻找到较好的解题思路。特别说明的是,该平台更为着重对于算法思路的训练,采取的并非 ACM 模式的全包全揽,而是提供一个需要实现的函数,测试用例的定义和主方法的调用等等将由系统提供。 需要训练 ACM 模式的,可以尝试牛客网的刷题模式。

LeeCode 刷题思路

作为一个初学者,对于 LeetCode 刷题并不敢说有多聪明,仅仅从我这段时间的刷题经验以及所了解到的相关知识做一个简单的分享。

刷题顺序

目前 LeetCode 对于题目的难度分类为 简单、中等、困难。并且题库规模已达两千多条,仍在更新中,这么庞大的题库,从何刷起。每次遇到各种刷题问题又找不到很好的解决方案。比方说:

  • 刷题方向不明确
  • 刷题难度定位不清晰
  • 题目优质解析还需时间寻找

首先,先简单说明一下,LeetCode 的难度水平:

  • 简单
    这个级别的题目旨在帮助大家熟悉基本技巧。通常来说,它们有一些简单粗暴的解答方法,我们需要学习的,则是应用这些小技巧来改进自己略显粗糙的解题方案。当我们随机点开一道数据结构或算法的简单题目,能在几分钟内列出最优解决方案并完成它们

  • 中等
    这个级别的题目旨在锻炼大家看穿问题的能力,它们通常是一些简单题目的 “伪装” 或“变化”。使用简单粗暴的解决方法可能会导致答题超时。我们需要学习的是分辨问题,并找出正确的解题方式。随机点开一个数据结构、算法的中等题目,如果我们能找出它们掩盖的问题,并可以在半小时内写出接近最优的答案,那么我们就可以适当挑战困难级别的题目了。

  • 困难
    通常情况下,这个难度,45 分钟的时间几乎不足以让我们写出一个完整的答案。我们需要学习的,是确定解题的正确方向。困难级别的问题可以暂不考虑最优答案,我们从成功解决问题开始,也可以适当取消答题的时间、空间限制。 解决问题之后,才来真正思考优化问题。

对于刷题的方向,具体看不同类型的刷题背景,介绍如下:

算法入门

如果是刚刚入门算法领域,想要刷刷算法题练练手的话,建议从难度为简单的算法题下手,并且,尽可能在一段时间内(一周 10 题,时间充裕 30 题)刷相同类型的算法题,直至提交成功率达到 80% 且提交代码用时尽可能达到超过 100% ,毕竟,成功率方面可能存在一些比较特殊的测试用例,无法达到 100% 。对于刷题类别的选择,可能各有各人的理解,这里提一下我的刷题顺序,不一定适合你:

数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯算法->贪心算法->动态规划->图论->高级数据结构

如果,如果可能的话,对于之前做过的题目进行一次二刷,尽可能快速度地完成一道道算法题。锻炼解题思路的获取能与实现力。倘若已经刷完以上的算法题目且能以较快速度完成,那就可以适当选择参加 LeetCode 每周周赛,体验一下竞赛的感觉。

算法进阶

如果是已经在算法领域浸淫多年,我这篇教程就是在您面前班门弄斧了,见笑了。不过,从我稚嫩的想法出发,目前的刷题方向着重于真题的相关研究,面对就业,刷各大公司算法真题,面对竞赛,刷往年竞赛真题。LeetCode 上也有每周周赛,建议前往外网版 LeetCode 参加周赛,国内周赛竞争还不是特别激烈,可能满足不了该有的竞争压力。争取拿到 LeetCode 周赛前几就是胜利的终点了。

刷题方法

刷题不是说看着别人的刷题思路甚至别人的代码对着一点点敲就行,最需要的是,对于每一道算法题目解题思路的理解,建议每刷完一道算法题就写相对应的笔记,不仅仅能够加深对当前算法题思路的理解,更方便后来对于同类型题目的归纳总结、融会贯通。

LeetCode 平台刷题策略

  1. 筛选完所需训练的算法问题,开始进入编辑页面,左边为问题描述,右边为代码编辑区,代码编辑区可以更改语言、测试用例、执行代码等等,对于代码的智能补全与语法高亮也有比较好的支持。
    LeetCode的使用方法_第1张图片

  2. 理解算法题目要求并编辑完算法代码之后,先执行代码,解决对应报错且题目出现的测试用例都能通过即可进行第一次提交。切记,不要去看题目评论与题解,独立完成一次题目的解决。

  3. 倘若第一次提交之后解答错误,可以在左边界面点击解答错误选项,进入相应页面,即可了解是哪个测试用例不通过,复制当前用例,返回代码编辑界面,重新编写代码,在右边底部测试用例栏内填入刚刚复制的测试用例,再次执行代码,执行无误后,再次提交即可。

  4. 顺利通过代码提交之后,就能知道当前代码的质量问题,如果没有达到 100% ,说明仍然存在优化的空间。倘若,一直无法得到算法优化的思路,那就可以前往题目的评论区与题解区,从而获取相对应的优化解析思路。

  5. 认真分析对比每一个解答的题目思路,从而学习他们解决问题的方法,做好相应笔记,真正化为己用。

  6. 如果对于 LeetCode 自带的编辑器不适应,需要拉取到本地进行的话,只需在代码中定义 main 函数,构造个输入用例,最后复制代码编辑区的代码作为方法函数,并在 main 函数中调用即可。

基本对于 LeetCode 的刷题方面的问题也基本介绍完毕了。还有几点需要说明的是,珍惜每一次的提交,(执行代码不会记录)平台都会记录提交详情,并计算每一道题的提交完成率,最后,在个人资料会有相应的统计数据与擅长技能的计算。

LeetCode 周赛策略

对于LeetCode周赛方面,本人还未亲身体验过只能纸上谈兵了,筛选重要的官方说明进行展示,可能存在错漏,望周知。

官方说明

  • 竞赛的排名是根据得分和完成时间来计算,得分一致的则根据时间进行排名。每道题目都会有一个对应的分值,往往这个分值是根据题目的难度系数来评定的,难度越高分值就越大。

  • 竞赛目标是在最短的时间内解出这些题目,并且保证最少的出错率。每次错误的提交会 +5 分钟 的加时惩罚直到您有一次正确的提交。完成时间等于您完成当前最后题目的时间加上加时惩罚的时间。注意:通过的题目重复提交是不会对您的竞赛结果有任何影响的。

  • 竞赛期间,不需要遵循系统给出题目顺序做题。可以自由变换策略,扫读所有题目后,从最容易上手的题目开始。

  • 为保障竞赛的公平性,力扣将在竞赛中 隐藏部分测试用例。当参赛者在竞赛中提交未通过时,力扣不会显示给参赛者被隐藏的错误用例。

  • 违规行为:

    • 一人使用多账号提交(力扣「中文社区 LCCN」和「美国网站 LCUS」账号属于两个账号)

    • 多账号提交雷同代码(抄袭)

    • 使用不正当手段影响他人竞赛的

    • 竞赛结束前在讨论区发布答案的

  • 测试用例不全面,可能导致一些本不应该通过的提交显示为 “AC” 。在这种情况下,力扣会补充测试用例并 Rejudge 所有 “AC” 的提交。

  • 有效提交

    • Hardcode 提交
      如果参赛者存在 “Hardcode 测试用例” 行为的代码 “AC” 了题目,力扣将判定参赛者的提交为有效提交。
    • 预计算提交
      预计算结果是指:用户预先计算了部分或全部测试用例结果,并将其直接添加到至提交代码中。
      规则及判分方式:如果参赛者的提交代码存在预计算结果的行为,我们建议参赛者附上生成预计算结果的代码。如参赛者含预计算结果的代码 “AC” 了题目,力扣将判定参赛者的提交为有效提交。

相关链接

推荐解题解析网站

  • 代码随想录
  • lucifer github LeetCode 题目解析
  • Fucking-algrothm github LeetCode 题目解析
  • LeetCode Cookbook

参考文章

  • 代码随想录
  • 力扣竞赛规则
    LeetCode的使用方法_第2张图片

你可能感兴趣的:(LeetCode刷题笔记,leetcode,算法,职场和发展)