前言

如果你是使用 C++ 来刷力扣题的话,可以在代码最前面加上以下代码内容:

1
2
3
4
5
auto init = [](){
ios::sync_with_stdio(false);
cin.tie(nullptr);
return 0;
}();

这样相当于力扣版的快读,在数据量较大时可以显著减少运行时间。

每一个题要做到 执行用时分布 超过 90% 的人,才算合格。

用时超过多少人

关于本文章所列出的题目,我给的建议是,从头到尾,每天练习至少两道题目。面对一个不会做的题,先自己思考至少 10 分钟,再尝试去看答案。看答案应该是看思路,然后再自己用代码实现,这样才最有效果。

后文中的每个题都有由我自己编写的简单题解与代码。

数组+数学

1523. 在区间范围内统计奇数数目 - 力扣(LeetCode)

1491. 去掉最低工资和最高工资后的工资平均值 - 力扣(LeetCode)

1281. 整数的各位积和之差 - 力扣(LeetCode)

1822. 数组元素积的符号 - 力扣(LeetCode)

896. 单调数列 - 力扣(LeetCode)

121. 买卖股票的最佳时机 - 力扣(LeetCode)

二维数组+数学

1672. 最富有客户的资产总量 - 力扣(LeetCode)

1572. 矩阵对角线元素的和 - 力扣(LeetCode)

数组+计数法或散列表

169. 多数元素 - 力扣(LeetCode)

41. 缺失的第一个正数 - 力扣(LeetCode)

387. 字符串中的第一个唯一字符 - 力扣(LeetCode)

953. 验证外星语词典 - 力扣(LeetCode)

242. 有效的字母异位词 - 力扣(LeetCode)

389. 找不同 - 力扣(LeetCode)

数组+指针

58. 最后一个单词的长度 - 力扣(LeetCode)

1768. 交替合并字符串 - 力扣(LeetCode)

数组+双指针

283. 移动零 - 力扣(LeetCode)

88. 合并两个有序数组 - 力扣(LeetCode)

75. 颜色分类 - 力扣(LeetCode)

189. 轮转数组 - 力扣(LeetCode)

344. 反转字符串 - 力扣(LeetCode)

11. 盛最多水的容器 - 力扣(LeetCode)

643. 子数组最大平均数 I - 力扣(LeetCode)

567. 字符串的排列 - 力扣(LeetCode)

3. 无重复字符的最长子串 - 力扣(LeetCode)

632. 最小区间 - 力扣(LeetCode)

二维数组+指针

(偏向于模拟,不喜欢这类题可跳过)

48. 旋转图像 - 力扣(LeetCode)

54. 螺旋矩阵 - 力扣(LeetCode)

20. 有效的括号 - 力扣(LeetCode)

150. 逆波兰表达式求值 - 力扣(LeetCode)

链表

(链表的题都比较典型,多练练下面几道就能应对几乎所有的链表题了)

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

160. 相交链表 - 力扣(LeetCode)

83. 删除排序链表中的重复元素 - 力扣(LeetCode)

203. 移除链表元素 - 力扣(LeetCode)

61. 旋转链表 - 力扣(LeetCode)

148. 排序链表 - 力扣(LeetCode)

206. 反转链表 - 力扣(LeetCode) (链表转置,数据结构链表部分典题)

92. 反转链表 II - 力扣(LeetCode)

141. 环形链表 - 力扣(LeetCode)

142. 环形链表 II - 力扣(LeetCode)

21. 合并两个有序链表 - 力扣(LeetCode)

24. 两两交换链表中的节点 - 力扣(LeetCode)

876. 链表的中间结点 - 力扣(LeetCode)

143. 重排链表 - 力扣(LeetCode)

2. 两数相加 - 力扣(LeetCode)

445. 两数相加 II - 力扣(LeetCode)

二叉树

144. 二叉树的前序遍历 - 力扣(LeetCode)

94. 二叉树的中序遍历 - 力扣(LeetCode)

145. 二叉树的后序遍历 - 力扣(LeetCode)

102. 二叉树的层序遍历 - 力扣(LeetCode)

404. 左叶子之和 - 力扣(LeetCode)

199. 二叉树的右视图 - 力扣(LeetCode)

104. 二叉树的最大深度 - 力扣(LeetCode)

112. 路径总和 - 力扣(LeetCode)

101. 对称二叉树 - 力扣(LeetCode)

226. 翻转二叉树 - 力扣(LeetCode)

103. 二叉树的锯齿形层序遍历 - 力扣(LeetCode)

105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)

98. 验证二叉搜索树 - 力扣(LeetCode)

230. 二叉搜索树中第 K 小的元素 - 力扣(LeetCode)

二分查找

704. 二分查找 - 力扣(LeetCode)

374. 猜数字大小 - 力扣(LeetCode)

35. 搜索插入位置 - 力扣(LeetCode)

852. 山脉数组的峰顶索引 - 力扣(LeetCode)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

33. 搜索旋转排序数组 - 力扣(LeetCode)

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode)

4. 寻找两个正序数组的中位数 - 力扣(LeetCode)

74. 搜索二维矩阵 - 力扣(LeetCode)

378. 有序矩阵中第 K 小的元素 - 力扣(LeetCode)

排序

912. 排序数组 - 力扣(LeetCode)

215. 数组中的第K个最大元素 - 力扣(LeetCode)

图论

图论这一节将细分成多个具体的小节。

顶点的度

997. 找到小镇的法官 - 力扣(LeetCode)

1557. 可以到达所有点的最少点数目 - 力扣(LeetCode)

深度优先搜索或广度优先搜索

200. 岛屿数量 - 力扣(LeetCode)

695. 岛屿的最大面积 - 力扣(LeetCode)

547. 省份数量 - 力扣(LeetCode)

1376. 通知所有员工所需的时间 - 力扣(LeetCode)

拓扑排序

207. 课程表 - 力扣(LeetCode)

210. 课程表 II - 力扣(LeetCode)