本文原本是打算加到我的新书《算法通关之路》的附录部分。不过由于力扣官方不过审,因此只好作罢。将这部分内容发到这里给大家参考。
《算法通关之路》介绍以及购买可访问:https://leetcode-solution.cn/book-intro
力扣(LeetCode )网站使用方法
力扣(LeetCode )官网收录了许多互联网公司的算法题目,一度被称为刷题神器。这里我们就来介绍下如何使用 力扣(LeetCode )网站。
由于力扣(LeetCode)本身也处于不断迭代之后,因此本文部分内容有可能在将来会变得不再适用。
以力扣国际站为例,其官网给出了四个分类:Algorithms、Database、Shell 和 Concurrency,分别表示算法题、数据库题、Shell 和并发题,第一个就是我们所需要刷的算法题。
并发是 2019 年才添加的新的模块。
点开 Algorithms 后,我们可以看到一个题目的列表,每个题目都有一个唯一的序号。力扣(LeetCode )目前有 1000 多道题目,并且一直持续更新,其中有一些是带锁的,需要会员才能查看。
后面的接受率(Acceptance)表示提交的正确率,Difficulty 表示难易程度。难易程度有三个级别,分别是 Easy、Medium 和 Hard。
- Easy 通常不需要太多思考和也不会有复杂的细节,比较特别适合新手或者拿来热身。
- Medium 级别就会有些难度,一般都会涉及到经典的算法,需要一定的思考。
- Hard 级别是最难的,有些时候是算法本身的难度,有些时候特别需要你考虑到各种细节。
这里分享一个小技巧给大家。衡量一道题目难不难除了看难度之外,还可以看下接受率,接受率越低代表题目越难,这个指标有时候比难度更靠谱。
你可以对题目进行筛选和排序。
如果我们只想要找某一类型的题或者某个公司的题库,可以通过 Tags 或 Company 来筛选。
另外我们在做某一题时,觉得还想再做一个类似的,可以点击题目描述下方 Show Similar Problems 或 Tags 来找到相似的问题。
每个题目都有各自的 Discuss 区域。在这里,许多人都把自己的思路和代码放到了上面,你可以发贴提问,也可以回复别人,里面大神很多,题解质量都很高,如果实在没有思路或者想看下有没有更好的思路可以来逛一下。通常来说我建议你优先看留言最多或者投票最多的。
点开某一个题目,会跳转到具体题目详情页面,你可以在右侧的代码区切换选择自己需要的编程语言。
代码编写完了之后,不要急着提交,先测试运行一下(Run Code 按钮)。你可以多写几个测试用力跑一下,没有问题再提交,要知道比赛的时候错误提交要加时间的。
提交通过之后,可以点开 More Details 查看详细运行结果信息。
每道题旁边的 My Submissions 可以找到自己的对于该题的提交情况,这里可以看到自己过去所有的提交,点 Accepted 或 Wrong Answer 就可以查看自己过去提交的代码情况,包括代码是什么,运行时间以及全部用户提交的时间分布图等。
以上就是 力扣(LeetCode )的主要功能,希望通过这一节内容能让你对 力扣(LeetCode )网站有所了解,从而更快地进行刷题。
刷题工具
所谓“工欲善其事必先利其器”,接下来给大家带来一些提高刷题效率的小工具。
Leetcode Problem Rating
经常有同学反映力扣难度设置的不合理。 比如:“为什么我觉得这个中等题目比某个困难还要难啊?”。
这其实很正常,尤其是在力扣上。因此我也不建议大家完全按照难度去刷题, 而是结合通过率等其他指标去刷。
而今天介绍的这个网站能够将力扣中的题目通过各个维度算出一个更接近题目实际难度的隐藏分。这个分数和你的竞赛分数是一致的。大家可以根据你的竞赛分去刷题。
比如你的竞赛分是 1800, 那么你就可以直接搜索 1800 - 1900 的题目进行练习,效率高很多。
网站地址:https://zerotrac.github.io/leetcode_problem_rating/#/
力扣代码调试器
力扣代码调试器是一款简单易用的代码调试工具,它能够随时检查代码的运行情况以及选择性地运行代码,以便您排错、调试。
力扣代码调试器支持以下特色功能:
- 支持无限制添加断点,单步运行调试
- 一键监听表达式,动态追踪变量,及时定位错误
「力扣代码调试器」处于内测阶段,具体功能可能会不定期调整,请以最终 release 版本为准。代码调试器目前支持 C++、Java、Python、Python3、C 等 5 种语言,持续更新中。
值得注意的是,这是一个会员才可以使用的功能。
力扣(LeetCode )For VSCODE
这个是一个可以让你在 VSCODE 编辑器中选题,写代码,测试,提交的力扣题目的插件。主要特点是可以利用自己编辑器的一切优势,包括但不限于编辑器主题,代码智能提示, 代码片段,调试工具。也就是说,上面提到的力扣代码调试器的大多数功能,你都可以通过 VSCODE 以及其扩展插件实现。
缺点是部分功能使用体验不好, 比如错误提示不明显,经常误提交等,不过最让我感到不舒服的是自定义测试用例,明显没有力扣官方做的好。
大家可以在 vscode 插件商店搜索 leetcode 进行下载安装。
LeetCode-Cheat
题解模板
为了方便大家写出格式良好的题解,插件现在内置题解模板功能,目前模板只有一套,这套模板是我经常使用的题解模板。
安装好我们的插件(版本需要 v0.8.0 及以上)后,打开力扣中文版,会发现如下的按钮。
点击之后会自动引导你到一个新的页面,
该页面的题解语言,题目地址和题目名称信息会自动填充。
你可以快速完成时间复杂度,空间复杂度的插入,复杂度已经按照性能好坏的顺序给大家排好了,点击即可插入。
此外我们提供了若干常用的公式供你快速复制使用。除了公式,其他内容都可以在右侧的预览区域查看。
写完只会可以点击复制,将其复制到其他地方以便持久化存储。由于我们没有做持久化存储,因此页面刷新内容就会消失哦。
最后祝大家写出漂亮的题解!
数据结构可视化
你可以使用 canvas 自由绘制各种数据结构,不管是写题解还是帮助理解题目都很有用。
我们提供了很多内置的模板供你快速上手。
如果你对内置的模板不满意,也可以将自己的模板保存以便下次使用。
学习路线
算法怎么学?推荐按专题来。具体到某一个专题怎么学?这里提供了一个学习路线帮助你。本功能旨在将一个专题中的题目进行分类。专题本质就是对题目的一种划分,学习路线基于专题又进行了一次划分。
复杂度分析
你的代码能会超时么?复杂度分析帮助你。
一键复制所有内置测试用例
省去了一个个手动复制的过程,效率翻倍!
代码模板
提供了大量的经过反复验证的模板。模板的作用是在你理解了问题的基础上,快速书写,并减少出错概率,即使出错,也容易 debug。
禅定模式
点击之后会变成这样:
底部控制台会消失,当你鼠标重新移过来或者退出禅定模式就出现了。
查看题解
当你在任意非题目详情页或者我还没有收录的题目详情页的时候, 我都会列出当前我总结的所有题解。
其实我给比较经典的题目做了题解,因此这个题目数目不是很多,目前是 173 道题。另外有时候我直接写了专题,没有单独给每道题写题解,因此数量上要比 173 多很多。
当你进到一个我写了题解的题目详情页的时候, 你就可以正式使用我的插件了。 它可以:
- 给出这道题目的前置知识。换句话说就是我需要先掌握什么才能做出这道题。
- 这个题目的关键点。
- 哪些公司出了这道题。
- 我实在不会了,给我看看题解吧。好,满足你。
- 题解我就不看了,直接 show me code 吧。好,满足你。
- 根据公司,查找题目。面试突击必备
后期规划:
- 更多公司信息。 持续完善题目的公司信息,这个过程需要大家的帮助,大家可以把自己面试遇到的问题发给我(附带公司和岗位信息),我可以免费提供咨询服务。
- 岗位信息。
- 可视化调试。 可视化展示你的代码允许情况。
- 自动制定复习计划。
- A I 智能提示。即新的提示也可以根据题目信息推测可能的解法。
- 等等
需要的话,可以去我的公众号《力扣加加》回复插件获取。
LeetBoard
这是一个帮助你写写画画的一个浏览器扩展工具。很多时候,我们需要在纸上演算一下,验证自己的思路,这个时候就可以用这个工具。
这个工具提供了多种常见数据结构的可视化,方便大家快速书写。目前支持的数据格式有:数组,链表,二叉树。
debug-visualizer
这是一个支持可视化调试的 VSCODE 插件。相比于平时我们 debug ,它能帮助我们可视化内存中的数据结构。比如数组,树,图等都可以胜任。由于其不是为力扣量身制作的,实际上它还有很多其他的用处, 比如可视化图表,比如折线图。其功能非常强大, 你甚至可以基于它定制一套自己专属的数据结构。
大家可以在 vscode 插件商店搜索 leetcode 进行下载安装。
总结
这五种工具,除了 debug-visualizer,其他都是为力扣量身定做的。
各个工具功能侧重各不相同, 大家也可以结合起来使用。总的来说:
- 如果你想在编辑器中写力扣,那么 力扣(LeetCode )编辑器插件是一个不错的选择。配合 debug-visualizer 可以实现丝滑般柔顺的感觉。
- 如果你想在力扣解题过程中写写画画,屡屡思路,建议使用 LeetBoard。
- 如果你想看看题目的公司信息, 题解等,建议使用我写的 LeetCode-Cheat。
- 如果你不想使用本地编辑器, 并按照一堆插件,只想用浏览器去完成,那么力扣代码调试器绝对是不二选择。
另外还有一些网站可以可视化算法的执行过程,这对算法初学者来说尤其重要,algorithm-visualizer 就是这样的一个网站,它收录了几乎全部常见的算法, 相信可以满足你。