友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

2026年 刷题日志

刷题日志

序号 题目 题解 备注

1

128. 最长连续序列

题解

❌ 求连续序列长度,可以先去重,再寻找当前序列起点,从起点向后查找,出现断点,则当前序列结束。取所有序列中,最长值即可。

2

746. 使用最小花费爬楼梯

题解

✅ 动态规划。楼梯顶部是比数组长度更长的一节。先写暴力破解,再备忘录,再进会到动态规划。

3

377. 组合总和 Ⅳ

题解

❌ 动态规划。在以往的思维定式中,爬楼梯总是: \(f(i)=f(i−1)+f(i−2)\)。这道题突破了这个思维定式,爬楼梯也可以:\(f(i) = \sum\limits_{j=0}^{n-1}{f(i-nums[j])}\)。

4

2466. 统计构造好字符串的方案数

题解

✅ 动态规划。爬楼梯解法:\(f(i) = f(i−zero) + f(i − one)\)

5

2266. 统计打字方案数

题解

✅ 动态规划。将字符串按照相同字符进行切割,根据加法原理,每个子串内部是“爬楼梯”:每个按键上面有 34 个字母,那么按键列表,就可以有 1~31~4 个按键按出一个字母,这就是爬楼梯:\(f(i) = f(i-1)+f(i-2)+f(i-3)\) 或 \(f(i) = f(i-1)+f(i-2)+f(i-3)+f(i-4)\);子串之间,根据乘法原理,直接相乘。

6

1081. 不同字符的最小子序列

题解

✅ 单调栈。统计出每个字符的数量,再加上一个是否添加过的标记,使用单调栈,将大的字符弹出,再添加小字符。这样就可以保证小字符尽可能在前面了。与 316. 去除重复字母 相同,不再赘述。

7

1997. 访问完所有房间的第一天

题解

❌ 动态规划。有点脑筋急转弯!看答案也是一脸懵逼!

8

2320. 统计放置房子的方式数

题解

✅ 动态规划。先只考虑一边的情况,再组合两边的情况。只考虑一边的情况,就是一个斐波那契数列: \(f(i) = f(i-1) + f(i-2)\)。

9

2850. 将石头分散到网格图的最少移动次数

题解

❌ 回溯。先找出波峰波谷节点,然后对波峰做全排列,针对每个排列与波谷求移动距离,最后取最小值。

10

30. 串联所有单词的子串

题解

❌ 滑动窗口。以为是回溯,但是回溯超时(152/182)。看答案,发现是滑动窗口。定长窗口,每次滑动距离为单词长度。

11

32. 最长有效括号

题解

❌ 栈。也可以用动态规划。有一点想不明白,在使用标记数组时,为什么可以直接设置栈顶和当前元素指定下标为 true,中间肯定都是 true 吗?

12

84. 柱状图中最大的矩形

题解

✅ 单调栈。使用单调递增栈,有更高元素就压栈,有低于栈顶的元素,就出栈,计算栈顶元素到当前元素之间的面积。两边加上高度为 0 的哨兵,可以极大简化代码。

13

1047. 删除字符串中的所有相邻重复项

题解

✅ 栈。栈为空,则入栈。不空,则比较最后一个字母和当前字母是否相同,相同则弹出,否则就追加。

14

3186. 施咒的最大总伤害

题解

❌ 动态规划。有点绕,需要把原始数组,按照伤害值转化成新的数组,这样就可以在新数组上,使用类似“打家劫舍”的套路来解题了。与“打家劫舍”套路不同的是,这里“选”的时候,前面被选择的项不是一个固定的项,是根据伤害条件选择出来的项。

15

1049. 最后一块石头的重量 II

题解

❌ 动态规划。将题目转换成把石头分成两堆,求两堆重量的最小差值。那么,最小差值,就是两堆重量相等。那么,题目就转换成在一堆石头中选择一些石头让其重量尽可能达到总重量的一半。题目结果就是总重量减去二倍的选择石头最大可能拼凑出来的重量。这就是 0/1 背包问题了。

16

37. 解数独

题解

⭕️ 回溯。有思路,没写出来。看来回溯还是得多练啊!

17

224. 基本计算器

题解

❌ 栈。官方题解的思路将括号展开。代码非常简洁,整体思路还要再思路一下。

18

137. 只出现一次的数字 II

题解

❌ 位运算。每个数字的每位相加,除以 3,余数即为唯一数。从二进制转换成十进制,可以通过“移位”+“相或”来完成。

19

260. 只出现一次的数字 III

题解

❌ 位运算。所有数字异或,相同的数字都会被抵消掉,只剩下只出现一次的数字。然后,根据二进制表示中最后出现的 1(因为只出现一次数字在该位上不一样),将数字分成两组,再分别亦或,即可得到两个数字。

20

115. 不同的子序列

题解

⭕️ 动态规划。看到动态规划的提示,用矩阵模拟“凑数”给凑出来的解法。

21

1530. 好叶子节点对的数量

题解

✅ 深度优先遍历。需要记录符合“好叶子节点”的数量。无需记录所有路径,只需要记录符合要求的路径的数量即可。

22

1171. 从链表中删去总和值为零的连续节点

题解

✅ 前缀和。计算前缀和,并保存到 Map 中,如果出现了相同的前缀和,证明中间一段的值相加为 0,去掉中间一段即可。

23

122. 买卖股票的最佳时机 II

题解

⭕️ 动态规划。这道题更好的解法是贪心算法。这次从动态规划的角度去看这个问题:“满仓”是继承或者买入;空仓则是继承或者卖出。

24

123. 买卖股票的最佳时机 III

题解

⭕️ 动态规划。在 题解 的基础上,增加了交易次数限制。思路懂了,边界条件总是不对。还要再思考。

25

787. K 站中转内最便宜的航班

题解

⭕ 深度优先遍历。动态规划的题目,先用深度优先遍历暴力破解一下。题目理解错了:是最多经过 k 站中转。

26

300. 最长递增子序列

题解

❌ 动态规划。将每个值跟前面所有值相比,当比其大时,在其之上加一。动态规划总想直接从一个值中获取,没想到还需要遍历。

27

1143. Longest Common Subsequence

题解

✅ 动态规划。

28

2800. 包含三个字符串的最短字符串

题解

❌ 回溯。先回溯,找出所有排列;然后,再将每个组合合并成字符串。这个过程中,会有两种“包含”关系,出现即返回长字符串。没有包含关系,就判断一个字符串前缀是否是另外一个字符串的结尾。

29

918. 环形子数组的最大和

题解

❌ 动态规划。利用 53. 最大子数组和^ 的解法,求出最大子数组和最小子数组。再根据最大子数组和是否大于 0,来决定如何返回。

30

1349. 参加考试的最大学生数

题解

❌ 动态规划。看了答案也是一脸懵逼,尤其是位运算,还需要多多练习。

31

91. 解码方法

题解

✅ 动态规划。从后向前,一个字符或者两个字符来判断是否可以编码成字母,然后递归调用直到字符串尽头。

32

1217. 玩筹码

题解

❌ 有点脑筋急转弯的感觉。左右移动两位免费,相当于奇数合并免费,偶数合并免费,相邻的偶数和奇数合并收费,统计奇数和偶数的数量,然后哪个少移动哪个就可以了。

33

1442. 形成两个异或相等数组的三元组数目

题解

✅ 位运算。直接暴力计算了。异或运算,支持交换律,结合律。再通过推演可知: \(S_i \oplus S_j = S_j \oplus S_{k+1}\) ⇒ \(S_i = S_{k+1}\)。所以,可以通过计算前缀异或来加速整个过程。

34

1400. 构造 K 个回文字符串

题解

❌ 有点脑筋急转弯+数学的感觉。K 的长度要小于等于字符串长度并且奇数次字符为 0 或小于 K 才能满足条件。

35

135. 分发糖果

题解

✅ 贪心算法。先从左向右遍历,当右边高于左边,则在左边基础上加 1;然后再从右向左,当左边高并且左边糖果少,则在右边基础上加 1。最后求和。

36

149. 直线上最多的点数

题解

⭕️ 数学。三点之间两两求斜率,斜率相等则共线。通过属性计算,可以避免出现浮点数。

37

201. 数字范围按位与

题解

⭕️ 位运算。暴力破解超时。对于大于 left 的前面的 1 都会成为 0,可以忽略。在 leftright 之间,要么是中间相同,要么是全部不同。所以,可以通过异或,求出后面的不同之处的位数,然后移位减一取反,再相与即可求出“前缀”。

38

212. 单词搜索 II

题解

✅ 前缀树+回溯。只用回溯超时。前缀树+回溯,通过测试。

39

399. 除法求值

题解

❌ 并查集。带权重的并查集,还要多练习。

40

433. 最小基因变化

题解

⭕️ ✅ 广度优先遍历。对基因每个可能的变异都要要做遍历。

41

502. IPO

题解

⭕️ 贪心算法。每次都获取当前可以获取收益的最大值。

42

223. 矩形面积

题解

⭕️ 有点着急。再细想一下。

43

68. 文本左右对齐

题解

✅ 看了题解,按照单单词行、多单词行和尾行分三种情况分别处理写出来的。

44

97. 交错字符串

题解

❌ 动态规划。将其转化成表格走路的思路来解决。需要先从各个字符串中,寻找出前缀字符串。

45

44. 通配符匹配

题解

❌ 动态规划。p 是字母或 ? 时,状态是确定的。当 p 时,状态转移方程就可以分为使用该 和不使用两种情况。

46

85. 最大矩形

题解

❌ 单调栈。统计每行的高度,从上往下长,逐行长高,逐行计算最大矩阵面积。使用 84.柱状图中最大的矩形 的思路,逐行求最大矩形。

47

229. 多数元素 II

题解

❌ 摩尔投票法。针对多个候选项的摩尔投票法,还是需要多思考,多练习。

截止目前,本轮练习一共完成 47 道题。