- 博客(265)
- 收藏
- 关注
原创 LC410. 分割数组的最大值【贪心 + 二分答案】
给定一个非负整数数组nums和一个整数k,你需要将这个数组分成k个非空的连续子数组,使得这k个子数组各自和的最大值。返回分割后最小的和的最大值。是数组中连续的部分。
2026-04-10 19:44:56
61
原创 带优先级括号匹配
其实对于优先级的处理也比较简单,因为我们这里的栈只会存放左括号,那么我们要往栈里面加左括号时,去判断一下栈里面有没有已经存在的左括号,如果有就说明此时存在括号的嵌套,我们就可以判断一下两者的优先级。所谓带优先级,就是当出现括号的嵌套时,要求外层括号的优先级大于当前括号的优先级。
2026-04-10 19:14:39
36
原创 LC165. 比较版本号【利用 stringstream + getline 做字符串分割】
给你两个version1和version2,请你比较它们。版本号由被点'.'分开的修订号组成。是它并忽略前导零。比较版本号时,请按依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为0。-110**输入:**version1 = “1.2”, version2 = “1.10”-1version1 的第二个修订号为 “2”,version2 的第二个修订号为 “10”:2 < 10,所以 version1 < version2。
2026-04-01 11:09:47
359
原创 背包模型(求组合)?爬楼梯模型(求排列)?
首先,我们定义一个**“抽象背包模型”**(注意这个抽象背包模型不是前面提到的普通背包模型):给定 n 个物品,装满容积为 m 的背包,求方案数/具体方案/等等。通过枚举顺序其实我们也可以发现,普通背包模型第一维先枚举物品,因此它的物品是“有序”的,也就不会产生重复,例如。而爬楼梯模型由于是在第二位才枚举物品,因此它显然的会出现重复的情况。在这里题目让我们求的是排列数,因此我们要使用爬楼梯模型。由于在这里题目让求的是排列数,因此这里要用爬楼梯模型。普通背包模型和爬楼梯模型是非常相似的两个模型。
2026-03-31 11:29:15
243
原创 LC470. 用 Rand7() 实现 Rand10()【拒绝采样】
在更高阶的统计学中,如果我们想从一个非常复杂的概率分布pxp(x)px中抽样,但这个分布太复杂了,算不出来。我们可以找一个简单的、容易抽样的“提议分布”qxq(x)qx,并乘以一个常数MMM,用M⋅qxM⋅qx把目标分布pxp(x)px完全“罩住”(就像用正方形罩住圆)。每次我们从qxq(x)qx中抽一个样本出来,然后以一定的概率决定是接受它还是拒绝它。这个概率取决于目标分布和提议分布在那个点的高度差。若A能等概率生成[1, X]的随机数,
2026-03-27 21:10:51
335
原创 接雨水类问题
为了让栈中所有元素最终都能被处理,最后额外加一个高度为。,表示柱状图中每根柱子的高度,每根柱子的宽度都是。所以只能移动左边,看看能不能找到更高的短板。下雨之后,问这些柱子之间一共能接多少雨水。轴组成一个容器,求最多能装多少水。如果这个值小于等于 0,就接不到水。求这个柱状图中,面积最大的矩形。这正是单调栈的典型应用。,那么当前短板是左边。
2026-03-27 19:39:37
301
原创 求环(回路)长度
https://www.acwing.com/activity/content/code/content/3444002/2360. 图中的最长环2608. 图中的最短环
2026-03-27 17:56:38
179
原创 矩阵快速幂
https://leetcode.cn/problems/climbing-stairs/description/https://leetcode.cn/problems/fibonacci-number/solutions/545049/fei-bo-na-qi-shu-by-leetcode-solution-o4ze/https://leetcode.cn/problems/total-characters-in-string-after-transformations-ii/
2026-03-27 17:43:34
225
原创 字符串哈希算法
给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1] 和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。字符串哈希算法的核心思想是通过一个固定的数学函数,将一个任意长度的字符串映射为一个固定大小的整数(即哈希值)。由于我们将无限可能的字符串映射到有限的整数空间中,必然会遇到“哈希冲突”(即两个完全不同的字符串计算出了相同的哈希值)。,而整数除法在这里会带来无法整除的问题,这就会导致我们的精度出现偏差,从而导致答案错误。
2026-03-24 21:01:57
362
原创 LC406. 基于身高重建队列【贪心】
C++// 规则 2:身高相同,k 小的排前面// 规则 1:按身高降序排(高的在前)});这段代码的目的是把所有的人排成一个特定的出场顺序。规则 1:按身高降序排列 (让最高的人先出场。这样在后续插入时,每次处理的人都比队列里已经存在的人矮。规则 2:身高相同时,按k值升序排列 (如果有两个人一样高(比如[7,0]和[7,1]),谁先出场?显然必须是[7,0]先出场排在最前面,然后[7,1]才能排在它后面。如果反过来,[7,1]先占了第 0 个位置,逻辑就乱了。
2026-03-23 23:14:49
373
原创 【跳跃游戏】题集
55. 跳跃游戏45. 跳跃游戏 II1306. 跳跃游戏 III1340. 跳跃游戏 V1345. 跳跃游戏 IV1696. 跳跃游戏 VI1871. 跳跃游戏 VII3660. 跳跃游戏 IX
2026-03-20 21:33:55
32
原创 中序遍历序列的下一个节点
并且,由于只需要找到节点 p 的后续节点,我们不需要维护完整的中序遍历序列,只需要在中序遍历的过程中维护上一个访问的节点和当前访问的节点。如果上一个访问的节点是节点 p,则当前访问的节点即为节点 p 的后继节点。由于在遍历过程中,当且仅当 node 的节点值大于 p 的节点值的情况下,才会用 node 更新答案,因此当节点 p 有后继节点时一定可以找到后继节点,当节点 p 没有后继节点时答案一定为 null。如果节点 p 是最后被访问的节点,则不存在节点 p 的后继节点,返回 null。
2026-02-07 21:52:52
62
原创 用位运算实现加减乘除法
除法的位运算实现,本质上就是**“按位填充商”**的过程:我们从最高位问到最低位:“嘿,商的这一位填 1 也就是减去y×2iy×2i,原来的数够不够减?够减 -> 填 1,更新被除数。不够 -> 填 0。这其实就是把十进制的长除法变成了二进制版本,效率非常高,稳定在 32 次循环内完成。
2025-12-03 17:51:45
802
原创 LeetCode 面试题 16.22. 兰顿蚂蚁
黑色格子集合black蚂蚁最终位置(x, y)& 方向dir覆盖所有走过格子的边界构造网格:初始化为全白'_'把所有黑色格子标成'X'遍历黑色集合中的每个(bx, by),在。最后填蚂蚁所在的位置,覆盖之前可能填的'X'
2025-12-03 16:36:42
965
原创 LeetCode 面试题 16.18. 模式匹配
满足上述条件,就返回 true,否则 false。组成,用于描述字符串中的模式。不能同时表示相同的字符串。数出 pattern 里。枚举一种字符的长度(比如。),因为总长度是固定的。的解(如果能整除的话)。),该字符串也匹配像。
2025-12-03 15:30:37
305
原创 多模字符串匹配算法 -- 面试题 17.17. 多次搜索
方法时间复杂度在M106M=10^6M106时表现朴素多次匹配ONMSO(NM + S)ONMS最差可达10910^9109次操作Trie 匹配OSNLO(S + NL)OSNL稳定在10610^6106左右AC 自动机OSNO(S + N)OSN接近线性时间,最优。
2025-12-02 21:19:23
807
原创 数据结构设计题
LRULFU链表循环队列哈希集合哈希映射跳表Trie循环双端队列Bitset有序流355. 设计推特3508. 设计路由器2296. 设计一个文本编辑器2349. 设计数字容器系统1797. 设计一个验证系统2353. 设计食物评分系统3408. 设计任务管理器1912. 设计电影租借系统2241. 设计一个 ATM 机器3709. 设计考试分数记录器2642. 设计可以求最短路径的图类3484. 设计电子表格1396. 设计地铁系统1603. 设计停车系统2502. 设计内存分配器红黑树828. 模拟栈8
2025-11-13 20:34:03
203
原创 字符串转数字的溢出问题
文章摘要:当将字符串"2147483647"转换为整数时,由于语句num = num * 10 + x - '0'中运算符优先级问题,导致整数溢出错误。实际执行顺序是先计算num * 10 + x(x被隐式转换为ASCII码值),而非预期的字符数字转换。解决方法是将表达式修改为num = num * 10 + (x - '0'),确保字符先转换为对应数字再进行运算。这揭示了C++中运算符优先级和类型转换的潜在陷阱。
2025-11-02 10:57:33
182
原创 求欧拉回路/欧拉通路
https://leetcode.cn/problems/cracking-the-safe/description/https://leetcode.cn/problems/reconstruct-itinerary/description/
2025-07-01 18:36:25
170
原创 爬楼梯类问题
有些人将一些爬楼梯模型的拓展题目强行解释为特殊化的背包问题,这样也行,毕竟我们上面就分析过,是可以将爬楼梯问题抽象为背包问题的,只不过这个背包需要考虑物品的顺序,但从理解上来说,将其解释为爬楼梯问题更容易理解。不过,如果我们注意观察爬楼梯模型和背包模型的代码,就会发现,爬楼梯是先遍历背包容器,再遍历物品;首先,爬楼梯类题目可以抽象为“类似于”背包问题的题目:将每次可以爬的楼梯数视为物品,目标楼梯阶数为背包容积,那么爬楼梯题目就相当于,给定。个物品,求装满背包所需的物品个数,不限制物品的使用次数。
2025-07-01 17:52:38
513
原创 完全二叉树的节点个数, O(log2(n) * log2(n)) 做法
如果不相等,则暴力递归计算,但由于完全二叉树中一定有一个子树是满二叉树,因此在递归过程中,有一个递归会因为 lh==rh 直接 pass 掉。对于满二叉树,我们可以递归左子树,在 O(logn) 时间内算出树的高度 h,然后计算 2^h-1 即可得到满二叉树中总的节点个数。所以,我们据此,可以优化完全二叉树中总结点个数的计算效率,当递归左子树的深度等于递归右子树的深度时,直接计算 2^h-1。所以这里实际上只暴力递归了半颗子树,由于每次递归只需要递归 1/2,所以总的递归深度为 log2(n)
2025-06-18 19:43:04
289
原创 LeetCode116.按字典序排在最后的子串 -- 求字符串中的最大后缀子串
由于只需要比较后缀,因此对于每个后缀子串,我们只需要记录其起点即可,暴力的比较 n 个后缀子串时间复杂度为。是最大的子串,那么由于字典序的特性(字符串相同时,长度越长,字典序越大)中任意字符构成的子串都不可能是最大子串,从而,我们可以直接更新。)的形式,也即一定是从某个字符出发,一直到字符串的结尾。在所有回合结束后,找出盒子中 字典序最大的 字符串。中对应字符构成的后缀子串的。开始的后缀子串更大,我们还应该更新。中任意字符构成的后缀子串都是小于。构成的后缀子串都是大于对应。的限制,字符串的长度最大为。
2025-06-11 10:53:17
356
原创 LeetCode2845.统计趣味子数组的数目 -- 数学 | 模运算
*注意:**子数组是数组中的一个连续非空的元素序列。以整数形式表示并返回趣味子数组的数目。这样,我们就将问题转换为了,在一个。,我们可以用前缀和简化,也即满足。那么这下思路就简单了,遍历。满足下述条件,则称其为。请你找出并统计数组中。
2025-05-29 19:48:51
991
原创 在【非负数组】中利用【负号】表达特定含义
依然是通过负号表示哈希的语义,这里的哈希表示该数字有没有被处理过。,请你找出其中没有出现的最小的正整数。并且只使用常数级别额外空间的解决方案。的语义,也即实现哈希的效果。给你一个未排序的整数数组。请你实现时间复杂度为。
2025-05-11 17:19:02
194
原创 数字搬家 | 基于交换的思想 | O(N)+O(1)
这题有些难度,单纯的套模板无法解决问题了,我们需要对数字进行转换,将其视为图,严格来说是单链表。具体的看注释,这道题和之前的题目不同,前面的题目都是。所谓的数字搬家,又称为基于交换的思想,指的是对于。,请你找出其中没有出现的最小的正整数。的时空复杂度下实现排序的效果。的特性,可以帮助我们解决很多问题。中的数字,并以数组的形式返回结果。),可知至少存在一个重复的整数。只有 一个重复的整数 ,返回。范围内,不存在重复的数字,。的整数,并以数组形式返回。此时,如果有一个重复的数字。构成了一个环,重复的数字。
2025-05-11 16:25:02
290
原创 LeetCode92 反转链表 -- 思维 | 一次遍历
先找到需要反转的子链表的头节点和尾节点,反转子链表,修改指针关系。,可以将这三个链表节点依次插入到链表节点。节点,那么此时就是头插到一个新链表中。
2025-05-11 15:52:45
303
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅