- Yuoek_zh-cn/
- 科学/
- 计算机/
- 算法/
- Leetcode/
Leetcode
- TODO: 完成 300 道题 2026-09-08 16:41
感觉 200 ~ 300 题有些杂乱,bfs() 还是有几个,也有了前缀树等。
- TODO: 完成 200 道题 2026-09-06
大致建立了递归思想,每一层递归进去后出来的追踪,用来解决 dfs() 这一类的题;
对于 DP,要新建一维二维或者更高维的信息真值表,用来标记信息;
节点的创建,树的一些操作。
一些标记
1 ~ 100 题目比较杂,有链表,双指针,dfs等100 ~ 114 左右是二叉树,对二叉树的一些操作,遍历,转化,平衡,深度,路径。
前序 + 中序 -> 二叉树
中序 + 后序 -> 二叉树
数组 -> 二叉树
链表 -> 二叉树
平衡二叉树
115 子序列
140 又是链表
175 后几个题操作 sql
190 位操作
191 反码补码获取最低为 1
192 ~ 195 bash 脚本
198 又回到递归了,以前耳闻的 “打家劫舍”
199 是二叉树,二叉树反复出现啊
- TODO 200 2026-09-06 13:38
感觉 200 题后开始有劲啦 😢
200 岛屿数量,以前看到过视频
202 快乐数,以前也看过
203 又到了链表,移除
204 205 对字符操作
206 反转链表,在这里消耗了好些时间,原因是自己对链表还是很陌生,总是把 .next 看成下一个节点的开始,但是这样理解起来很费劲,当把 .next 看成当前节点的后面部分就好理解了。创建哑节点,dummay,当把一个节点插入时,先备份这个节点后面跟的节点地址,用 nxt 标记, 然后把哑节点后面跟的地址赋给这个节点后面要跟的地址,刚开始 dummy.next 为 None。 然后就把这个节点赋给哑节点后面要跟的地址,接着就把之前备份的当前节点的下一个地址标记为当前节点 curr 。就这样重复进行。
208 前缀树,没有当前字母时,新建 26 个节点
209 也是使用前缀和,用函数 accumulate(nums, initial=0) 自动前 N 项相加。
210 课程表 2 ,忘了之前哪个题是课程表 1 了。
211 添加和搜索单词,使用数据结构设计。
212 构建前缀树 + 之前岛屿数量的思想。
213 打家劫舍 2 。
214 最短回文串,使用正向逆向哈希,$prefix_i = prefix_{i-1} * base + v_i$ ,$suffix_i = suffx_{i-1} + v_i + basse_i$ 。
215 使用递归,寻找中间值,然后 l, r 依次与之比较,也可以使用 nlargest(k, nums)[-1] 直接尾递归,有也可以使用统计出现的次数。
216 组合总和,多重递归,太难推了,只能往前最多看三层啊,就行象棋一样 🥲 。但也有方法不用递归 😅 。
217 存在重复元素,可以先 sort() 后用 pairwise() 两两比较。也可以将列表转为 set(),如果有重复元素就会去掉,然后再将 set() 的长度和 list 的长度比较。这些想法太牛了 😸 。
218 天际线问题,二维数组有点难跟踪啊,跟踪了一会还是没有思路。
219 存在重复元素 2 ,新建字典 d{},每次选素循环判断是否在字典内,不在就存进字典,在的话就比较字典内元素索引值是否小于等于 k 。
221 最大正方形,使用 DP,创建 DP 数组用来标记每个元素的信息。
222 完全二叉树的节点个数。使用递归。
224 基础计算器,大脑不在状态啊。
225 用队列实现栈。
226 翻转二叉树。
227 又是计算器的实现。
228 汇总区间,之前也遇到过区间汇总的题目,暂时先不调试了。
229 众数求和 2 。
230 二叉搜索树第 k 个小的元素,从左递归到右递归查找叶子节点,然后找到叶子节点后将 k 值减 1,当 k = 0 时则为第 k 个最小元素。
231 2 的幂,n & (n -1) 去掉 n 最右边的 1 。
232 用栈实现队列,与 225 题相反。
233 1 的个数。
234 回文链表,又是链表,昨天才在理清头插法 🙄 。
235 236 是二叉树,求最近公共祖先。
237 链表节点删除。
238 数组的乘机。
239 最大滑动窗口。
- todo: 2026-09-07 20:19 明天看看能否看到 270 。
240 搜索二维矩阵。
241 为运算符设计优先级。
242 有效的字母异位词。
243 最短单词距离。
244 最短单词距离 2 。
245 最短单词距离 3 。
246 247 248 中心对称数。
249 移位字符串分组。
250 统计同值子树。
252 253 会议室。253 使用查分。
254 因子组合。
255 验证二叉搜索树的前序遍历序列。
256 粉刷房子。
257 二叉树所有路径。
258 各位相加。
259 最小三数之和。
260 只出现一次的数字,xs & -xs 取出最低位 1,其余置零,记得之前有一个题用到了这个方法,而 n & (n - 1) 则为清楚最右边第一个 1 。这两个位操作要记住。
261 以图判树。又到了没有状态的时间了 😪 。之前的题目应该有图的吧,忘了怎么创建图了。
262 又到了操作数据库的题了。
263 丑数,之前好像也看到视频的吧?!! 难度为简单,但是自己从零思考真的能想出来吗?
264 丑数 2 ,创建一个列表一个字典来存储。
265 粉刷房子 2 。
266 回文排列,使用 Counter() 统计单词出现次数,然后 % 1,偶数为 0,奇数为 1,求和是否小于 2 。
267 回文排列 2。
268 丢失的数字,使用位操作。
269 火星词典。
270 最接近的二叉搜索树值。递归,只要有树就首先想到递归啊。
271 字符串的编码与解码。
272 最接近的二叉搜索树值 II 。dfs() 真的疲惫了,我说的是对 dfs 疲惫了,晚上睡不着就看 dfs 吧 😿 。
273 整数转换英文表示。感觉和转换罗马数逻辑差不多的吧,怎么代码那么多?!!< _ <
274 H 指数,先降序排序,然后从后面索引,看当前索引值是否小于等于排序数组 [当前索引 -1 ] 的值。第二种方法创建 cnt[] 数组来存储的信息是什么呢?关于数组索引让我眼花缭乱,就像在追踪变量一样。第三种解法就不发表想法了。
275 H 指数,也是先排序,然后使用二分。。
276 栅栏涂色,创建两个数组 f[] 和 g[] 维护状态,至于为什么状态是那样转移我就不清楚了。第二种解法是使用 for 循环。
277 搜寻名人,模拟 know api,然后使用两个 for() 循环,来将当前 i 和 ans 作为数组索引来判断 know api 数组值是真是假。
278 第一个错误的版本,之前有题是比较版本号。使用二分的思想。
279 完全平方数,DP,先开根,然后创建 n + 1 列和 m + 1 行数组用来维护状态信息,然后依次从行列循环更新状态。另一个方法使用一维数组进行维护。
280 摆动排序,从索引 1 开始,判断当前索引是奇数还是偶数,如果是奇数看当前索引值是否小于前一个索引值,是就交换这两个数字,如果当前索引是偶数,就判断当前索引值是否大于前一个索引值,是就交换这两个数。
281 锯齿迭代器,之前有锯齿变换,好像是链表。还有一个 Z 字形变换。
282 给表达式添加运算符。dfs(),两层条件进入递归,第二层依次进入三次递归。
283 移动零,使用变量 k 标记 0 前边不为 0 的个数。当当前索引值不为零是,就交换当前 [索引值]和 [索引为 k] 的值。
284 窥视迭代器,又是迭代器,暂且不跟踪了。
285 二叉搜索树中的中序后继,BST 的操作,之前哪个题也是 BST 操作去了? ❓
286 墙与门,是不是 dfs() 都用递归,bfs() 都用 while + for ?I Don’t Know !^_^
287 查找重复数,这两个式子看懂了就简单了,bisect.bisect_left(range(len(nums)), True, key=f) ,sum(v <= x for v in nums) > x 。
288 单词的唯一缩写。
289 生命游戏,DP,并且有四层 for(),赶紧撤退 🤣 。
290 单词规律,求解方法和之前哪个题目有点像,创建字典 da{} 和 db{} ,并且单词不在字典就加入,da{} 和 db{} 键值对反过来,如果当前键已经存在,就看值是否相等,相等继续,不相等返回 False 。请记住 zip() 函数。
291 单词规律 2 ,使用 dfs() 还有栈就知道这个题不简单。
292 Nim 游戏,取模判断当前值是否是 4 的倍数,是就返回 False ,不是就返回 True 。
293 翻转游戏,按顺序两两反转后,加入 ans[] ,然后再还原,再依次两两翻转加入 ans[] ,依次循环。
294 翻转游戏 2 ,使用了记忆化缓存,dfs() 。
295 数据流的中位数,使用 headp 。初始化大堆小堆。
296 最佳的碰头地点。通过行列遍历找到 grip[] 元素为 1 的,然后将行列索引保存,循环完之后给保存的列索引排序,然后再 sum(abs(v - x) for v in arr) 。
297 二叉树的序列化与反序列化,二叉树的先让我省省心吧,PASS ~~ 。
298 二叉树最长连续序列,DFS() ,有关连续序列这些记得用 dfs() 。
299 猜数字游戏。
- 300 题 2026-09-08 16:38 😝
300 最长递增子序列,用 i 标记当前状态数组索引,然后 j 依次从 0 到当前 i ,再来比较 原数组 i 和 原数组 j 的大小,num[j] < num[i] 就更新 f[i] 的状态值。第二种方法便是使用树状数组。
301 删除有效括号,先计算出匹配左右括号,是( 则 l + 1 ,是 ) 则 r + 1,并且 r + 1 前先判断是否存在 l,存在则 l - 1 。处理好 l 和 r 后便进入递归,dfs() 。
302 包含全部黑色像素的最小矩形。
303 区域和检索 - 数组不可变。
304 二维区域和检索 - 矩阵不可变。
305 岛屿数量 2 。
306 累加数。
307 区域和检索 - 数组可修改。303 304 都是区域和检索。
308 二维区域和检索 - 矩阵可修改。
309 买卖股票的最佳时机含冷冻期。
310 最小高度树。
311 稀疏矩阵的乘法,矩阵是自己的一大灾难啊, 😢 。
312 戳气球。
313 超级丑数。
314 二叉树的垂直遍历。
315 计算右侧小于当前元素的个数。
316 去除重复字母。
317 离建筑物最近的距离。
322 零钱兑换,DP 一维背包。
323 无向图中连通分量的数目,又来图了。
325 和等于 k 的最长子数组长度。
326 3 的幂。
353 贪吃蛇。
385 迷你语法分析器。