我们的 slogan 是: 只有熟练掌握基础的数据结构与算法,才能对复杂问题迎刃有余。
建议大家先学习基础的数据结构与算法,然后从简单到困难的顺序刷题。
- 这里有一张互联网公司面试中经常考察的问题类型总结的思维导图,我们可以结合图片中的信息分析一下。
(图片来自 leetcode)
其中算法,主要是以下几种:
- 基础技巧:分治、二分、贪心
- 排序算法:快速排序、归并排序、计数排序
- 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
- 图论:最短路径、最小生成树
- 动态规划:背包问题、最长子序列
数据结构,主要有如下几种:
- 数组与链表:单 / 双向链表
- 栈与队列
- 哈希表
- 堆:最大堆 / 最小堆
- 树与图:最近公共祖先、并查集
- 字符串:前缀树(字典树) / 后缀树
一定不要死磕一看就能写出来的题目,也不要死磕看了十分钟也没有思路的题目。
进入 problemset, 选择自己想刷的题目即可。比如我想刷搜索题目,就可以标签中进行过滤,同时建议大家选择难度范围。新手建议 1700 分以下练习。等到熟练之后可以挑战一下 1800 - 2500 分数段。
同一个分值的题目难度差距也可能很大,因此大家同时结合通过人数来排序。
这样可以更容易找到难度合适的题目。
大家从这个链接进去就可以看到我选择的过滤标签了。
等到大家熟悉了节奏,推荐大家按照比赛的方式做题。即将一次 contest 的题目整个做一遍。cf 中是按照编号进行组织的。
比如 101a 就是 101 比赛的第一道题。 101c 就是 101 比赛的第三道题,以此类推。
做完一道题建议大家看一下题解,入口是这里的 tutorial。
如果你想看其他搜索人的代码,则可以进入 status 查看。所有人的答案都在这里,你可以根据多个维度进行排序,比如按照代码长短排序。
大家可以使用codeforces-solutions 插件快速进入当前题目的 status 界面。
还有很多其他的 cf 插件大家可以体验一下。比如 Codeforces Enhancer
另外大家也可以使用 zerotrac 开发的用于计算力扣中题目分数的网站。这里的分数指的是竞赛分,大家可以根据自己的竞赛分选择稍微比自己竞赛分高一点的题目进行练习,注意这个只是根据通过人数等计算的一个预估分数。地址:https://zerotrac.github.io/leetcode_problem_rating/
这个网站只能预估 764 题以后的题目,之前的老题无法预估。
你可以将其看成是学习路线,也可以看成是经典题目。
这里的题目按照难度进行汇总,方便大家根据自己的情况选择学习。分数划分和 codeforces 一致,范围为 800 - 3500 分。