友情支持

如果您觉得这个笔记对您有所帮助,看在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

题解

✅ 动态规划。

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