- 博客(79)
- 收藏
- 关注
原创 2026.03.23 最长递增子序列 & 最长连续递增序列 & 最长公共子序列
思路:维护一个数组group,group[i]代表长度i的子序列的结尾,迭代时外层循环0-n,内层循环j替换,找到第一个大于等于它的。对于不要求连续的子序列,dp代表的都是以nums[i]结尾的最长值。
2026-03-24 00:01:09
62
原创 2026.03.22 不同的子序列 & 两个字符串的删除操作 & 编辑距离
【代码】2026.03.22 不同的子序列 & 两个字符串的删除操作 & 编辑距离。
2026-03-22 00:43:38
32
原创 2026.3.18 买卖股票的最佳时机4 & 含冷冻期 & 含手续费
本文介绍了三种股票买卖问题的动态规划解法:1) 限制交易k次的最大利润,使用buyList和sellList数组记录状态转移;2) 含冷冻期的情况,通过hold、sold、ready三个状态表示不同阶段;3) 含手续费的情况,仅需hold和sell两个状态。所有解法都采用动态规划思想,通过状态转移方程计算最优解,时间复杂度均为O(n)。其中冷冻期问题需要额外考虑状态转移条件,而手续费问题则在交易时直接扣除费用。
2026-03-18 23:28:54
31
原创 2026.1.31 非递减子序列
树层去重:一个used_level局部变量,记录当前层的数据哪些是用过,避免同一层出现相同的节点导致重复,使用set或哈希,用值作为索引。树枝去重:一个used全局变量,记录哪些是当前path使用过的数据,需要回溯,索引和原数组相同。# 实现无序列表的层级去重。
2026-01-31 14:45:38
133
原创 2026.1.21 修剪二叉搜索树 & 将有序数组转换成二叉搜索树 & 把二叉搜索树转换为累加树
【代码】2026.1.21 修剪二叉搜索树 & 将有序数组转换成二叉搜索树 & 把二叉搜索树转换为累加树。
2026-01-21 20:12:29
54
原创 2025.12.18 二叉搜索树中的众数 & 二叉搜索树中的众数
从低向上遍历,如果目标子节点分别在左右子树中,当前节点为公共祖先。如果当前节点是目标子节点,且另一个目标子节点在左子树或右子树中,则当前节点是公共祖先。方法一:二叉搜索树中序遍历是有序数组,遍历过程中记录出现怨怒是出现的次数。find_node返回目标子节点是否在当前子树中。方法二:直接计数,排序。
2025-12-18 17:15:50
154
原创 2025.12.15 验证二叉搜索树 & 二叉搜索树的最小绝对差
设置两个阈值,遍历每个节点的时候,单独判断当前节点是否在阈值区间内,初始阈值为无穷小和无穷大,左子树收缩右值,右子树收缩左值。收缩的值为当前节点的值。中序遍历在二叉搜索树中十分重要,对二叉搜索树中序遍历,可以获得一个有序数组。
2025-12-15 18:11:44
183
原创 2025.09.30 根据中序后序遍历构建二叉树 & 最大二叉树
3. 根据中序遍历数组中root节点的绝对索引值,计算出左右子树的大小,在后序遍历数组中切割,获得左右子树对应的后序遍历数组。当前节点的左子树在当次迭代中确定,循环弹出栈顶元素,直到找到栈顶最后一个小于当前节点值的元素,将其作为左子树。节点的右子树在之后的遍历迭代中确定,在迭代的过程,栈顶元素若大于当前节点的值,则将当前节点复制给栈顶右子树。1. 先用dic记录中序遍历数组的映射,方便快速找到root节点对应的绝对索引。2. 中序遍历中root节点左边的是左子树的中序遍历,右边是右子树的中序遍历。
2025-09-30 13:15:43
251
原创 2025.09.26 完全二叉树的节点数 & 平衡二叉树 & 二叉树的所有路径
对于完全二叉树的节点数,可以使用公式计算 2 ** height + 1,利用左子树和右子树的高度比较来判断哪个子树是完全二叉树。后序遍历 + 剪枝,若任一子树中出现不平衡的情况,则返回 -1,终止迭代。
2025-09-26 17:19:49
620
原创 2025.09.17 翻转二叉树 & 对称二叉树 & 二叉树的最大深度
【代码】2025.09.17 翻转二叉树 & 对称二叉树 & 二叉树的最大深度。
2025-09-17 18:01:21
214
原创 2025.09.09 前k个高频元素
方法3:快速排序,当选中元素经过快排程序之后,若是正好位于k-1的位置,则前k个元素已经找到;若是 i < k-1 则需要在数组 i 位置的后面迭代快排;若是 i > k - 1 则需要在数组 i 位置的前面迭代。方法2:用堆的方式,维护一个大小为k的小顶堆,每次push进一个元素,pop出一个最小的元素。实现方式1:使用 heapq.nlargest(k, []) 函数。方法1:用python3的 collections 模块。实现方式2:使用 heapq 手动维护堆。
2025-09-09 14:22:28
175
原创 2025.09.08 逆波兰表达式求值 & 滑动窗口的最大值
用栈,如果是数字则压栈,如果是运算符,则用栈顶的两个数字计算。python3中的 // 是向下取整,而不是向0取整,所以需要先用浮点算完之后转为 int 值。python3中没有方法判断一个字符串是否会合法整数,本题除了字符就是数字不用判断,python中判断字符串为合法整数的方法是用 try-except。单调队列,维护一个单调递减的队列,需要判断队头是否过期。这里用栈+左右指针模拟了双端队列。
2025-09-08 15:12:57
254
原创 2025.09.05 用队列实现栈 & 有效的括号 & 删除字符串中的所有相邻重复项
关键在于入栈,q1作为存储队列,q2作为压栈操作队列,先将元素压入q2,再按顺序将q1的元素转移到q2,同时交换q1,q2 的引用。3. deque在单线程中效率高,有多样的操作(在两端进行添加(2. queue的效率比较慢,操作只能是先进先出。1. queue是多线程安全的,deque不是。用栈的方式判断括号是否合法。) 操作时,时间复杂度为。
2025-09-05 16:15:39
351
原创 2025.09.01 重复的子串 & 用栈实现队列
若一个字符串能够被其子串重复多次构成,则说明该串循环右移小于len次,可以等于原串。代码上的实现,扩展两倍str = s + s,去除首尾字符,判断str是否包含s。用KMP算法,求next数组。
2025-09-01 16:36:10
161
原创 2025.08.24 路径加密 & 动态口令 & KMP
python中字符串类型是不可变类型,当需要对字符串进行原地修改操作时,需要提前转化为list。前缀:包含首字母不包含尾字母的所有子串;后缀:包含尾字母不包含首字母的所有子串。或者也可以使用双端队列,但是涉及到更多的数据类型转换,所以速度会慢一点。构建next数组从1开始,因为s[0] = 0,首字符不存在前后缀。KMP算法,解决字符串匹配的问题。object:找到最长相等前后缀。匹配的时候从0开始遍历。
2025-08-24 14:45:07
245
原创 2025.08.21 四数之和 & 翻转字符串1&2
剪枝:若当前最小的四个数相加大于target,则结束循环;若当前遍历的数,加上最大的数小于target,则直接进入下一次循环。思路和三数之和一样,多套一层循环,再利用左右指针遍历。相关的切片操作:s[start:end:step]
2025-08-21 13:20:30
213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅