为了解决几个痛点:
总有读者不知道如何使用 ACM 模式刷题。
很多公司的历年真题分散在各个论坛,没有对应的判题系统和标准题解,难以练习。
把握不住真题和模板题之间的脉络,学了算法框架,但是题目变一变还是难以求解。
我基于多年的算法教学经验和内容积累,自研了一套刷题系统,彻底解决了上述问题:
我做这套刷题系统的目的:
不追求大而全的题库,而是追求少而精,目标是出总结出 100 道以内的「核心题目」,刷完就能到达 80 分的水平。
为了实现这个愿景,必须介绍一下这套系统的三大特色。
一、同时支持 ACM 和核心代码模式
对于本站的所有题目,都有三种刷题模式可供选择:核心代码、ACM 模板、ACM 标准:
其中「核心代码」模式就是 leetcode 的模式:
主要特点:
和 leetcode 类似,仅需要编写核心算法代码。
题目描述告诉你输入的参数,以及你的算法应该返回什么。
自定义测试用例和 leetcode 完全一致
「ACM 模板」模式作为核心代码模式和标准 ACM 模式的过渡阶段:
可以看到这个模式和核心代码模式的主要区别:
题目描述改变为 ACM 模式风格,告诉你第一行输入什么,第二行输入什么,你需要输出什么等等。
测试用例格式变为 ACM 模式,输入若干行数据。
代码改变,添加了读取输入的代码。
虽然需要读取输入输出,但是处理输入输出的代码直接预设了,你只需要完成上面Solution类中的代码即可,而Solution类其实就是核心代码模式的代码。
这个模式将 IO 处理代码和算法代码清晰地解耦,主要目的是帮助读者从核心代码模式向 ACM 模式过渡。
最后一个模式「ACM 标准」就是原汁原味的 ACM 模式,纯白板没有任何预设代码,需要你从头编写代码,并按照题目要求输出答案:
网站的所有题目都支持上述三种模式供大家选择。我对初学者的建议是:
先使用核心代码模式,把精力集中在理解和练习算法思维上。算法思维掌握纯熟了,花两天熟悉一下 ACM 模式就够了。
你可以参考「ACM 模板」模式,给核心算法代码加一些 IO 处理代码就可了,有啥神奇的嘛。
二、历年真题 + 标准题解
目前收集了 150+ 公司真题,每道题目都配有 Java/C++/Python/Go/JavaScript 几种主流语言的标准解法,和网站教程的代码风格一致,完全采用算法框架的写法,拒绝黑科技代码!
而且题目会显示前置知识的引用,告诉你完成这道题需要完成什么前置知识点或前置的题目:
点击前置知识点,跳转到路线图,对应的前置知识点会出现闪动的红色边框:
三、围绕核心算法,展开题目变体
本站题库的特殊之处是支持「变体」列表。
核心题库中的每道题目都有一个「变体」标签,引用站内、站外的所有相关题目,并配有标准的模板解法代码,方便大家理解题目之间的相关性,用一套算法框架完成所有题目:
支持「变体」的目的是,让大家仅刷 < 100 道核心题目,就能到达 80 分的水平。
目前整个系统还在不断完善,欢迎大家体验和反馈问题:
https://labuladong.online/zh/problemset/