- 博客(55)
- 收藏
- 关注
原创 算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
如果 n 是偶数,那么序列的最后一个数被删除,倒数第二个数保留。操作后,首项 start 变成序列的倒数第二个数 start+(n−2)⋅d,其中 n 和 d 都是操作之前的值。操作后,首项 start 变成序列的最后一个数 start+(n−1)⋅d,其中 n 和 d 都是操作之前的值。以1-9的删除为例说明一下删除过程:1,2,3,4,5,6,7,8,9。第二次删除后:1,5,9 从右往左看公差d=-4=2*(-2)第一次删除后:1,3,5,7,9 从左往右看公差d=2。这个思路比较容易想到。
2026-09-26 11:23:08
161
原创 算法-交替方向的最小路径代价III-Dijkstra最短路径算法
思路:Dijkstra最短路径算法模版题,需要注意的是除了优先级队列,还需要一个最小值数组维护答案,举例:比如从A出发到C,有两条路径,A->C是权值是5,先A->B,全值是3,然后B->C,权值是4,按优先级队列,会先走A->B,再走B->C,权值和是7,但实际上是从A->C权值是5,权值最小,这就需要一个最小值数组,另外需要考虑的就是最小值数组维护的维度。因此,无论是否支付了惩罚代价,所需遵循的奇偶性规则在每次行动后都会交替改变。的单元格,或者在当前单元格等待。,表示一个网格的行数和列数。
2026-07-30 21:13:46
241
原创 算法-好子序列查询-数学+线段树
是指通过删除原序列中的某些元素或不删除任何元素,并且不改变剩余元素相对顺序后得到的序列。5、所选序列最大公约数(最值)通过线段树来维护。在每次查询更新后,判断当前数组中是否存在。返回一个整数,表示使得数组中存在。满足以下条件,则称其为。思路:数学分析+线段树。
2026-07-30 10:55:11
280
原创 算法-删除元素后最大固定点数目-典型最长增长序列算法
当数组中nums[i]的元素x需要移动i-x步时,比x大的元素nums[j]=z需要的移动步数必须大于i-x步时才能让i,j同时成为固定点位,因为nums[i]移动的i-x步的时候,nums[j]也会移动的i-x步,如果nums[j]需要的移动步数小于nums[i]时,则两者不能同时成为固定点位。需要维护num[i]开始的最长增长序列长度和nums[j]开始的最长增长序列长度。要求i==nums[i],当i增加的时候nums[i]也需要增加,也就是连续增长序列,也即本题求最长连续增长序列。
2026-07-27 21:38:16
222
原创 算法-照亮道路的最少灯泡数-差分
差分:这题有点类似元素的入栈和出栈,灯可以照亮的初始位置表示入栈,可以照亮的结束位置表示出栈,入栈和出栈之间的部分可以被照亮。位置都可见所需安装的最少额外灯泡数量。一个正常工作的灯泡照亮,则该位置是。因此,所需的最少额外灯泡数量为 2。,表示一条路上从 0 到。(包含边界)的位置。
2026-07-27 20:45:20
247
原创 算法-滑动窗口最大值
的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。滑动窗口的位置 最大值。滑动窗口每次只向右移动一位。
2026-07-15 17:22:57
206
原创 算法-字符流-字典树&AC自动机
思路一中需要一个StringBuilder记录已经出现的字符,实际上在字典树中构建AC自动机就可以去掉这个StringBuilder,AC自动机实际上是KMP思想+字典树的结合,当匹配时候的时候,可以不用回到root节点重新开始匹配,而是增加了失败指针,跳转到失败指针的继续匹配,提升性能。思路二:字典树+AC自动机。
2026-06-22 11:24:47
207
原创 算法-k个一组翻转链表
用双向链表解决该问题,需要使用o(k)的辅助空间,实际上用常量的空间复杂度就可以解决该问题。是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。用双向链表解决该问题。
2026-06-22 11:01:51
206
原创 算法-阶乘函数后K个零
4、如果一个数n包含的5的数量正好是K个,那么n+1,n+2,n+3,n+4,这4个数包含的5的数量也是K个。加上n这个数就是5个数,小于n的数,不够k个5,大于等于n+5的数,5的数量大于k个。2、阶乘中2的数量远远多于5的数量,以10以内的数字为例,2,4,6,8都有2,5却只有一个。1、要想产生0,就需要有2和5,2*5就会得到0,像10,100等都可以拆成多个2和5相乘。3、想要有K个0,可以在5*K的范围内查找即可,因为5*k表示的数的阶乘,5的数量>=k。末尾是 0 的数量。
2026-06-10 10:49:16
198
原创 算法-灌溉花园的最少龙头数目-贪心
这道题可以用动态规划解,也可以用贪心算法解,贪心思路:在灌溉的开始区域相同的情况下,选择结束区域最远的水龙头打开,这样就可以保证用最少的水龙头灌溉花园。只需要打开点 1 处的水龙头即可灌溉整个花园 [0,5]。点 0 处的水龙头可以灌溉区间 [-3,3]点 1 处的水龙头可以灌溉区间 [-3,5]点 2 处的水龙头可以灌溉区间 [1,3]点 3 处的水龙头可以灌溉区间 [2,4]点 4 处的水龙头可以灌溉区间 [4,4]点 5 处的水龙头可以灌溉区间 [5,5]处的水龙头,可以灌溉的区域为。
2026-06-10 10:33:18
191
原创 算法-计算右侧小于当前元素的个数-分治&归并思想
1、归并的时候右边的数组元素一定是在左边组数组元素的右边。2、由于是有序数组可以进行快速的统计,提升统计的效率。个更小的元素 (2 和 1),按要求返回一个新数组。个更小的元素 (1)个更小的元素 (1)
2026-06-09 11:32:51
266
原创 算法-乘法表中第K小的数-二分
但是你能在乘法表中快速找到第。的乘法表中,找出并返回第。第 5 小的数字是 3。第 6 小的数字是 6。的一个整数矩阵,其中。
2026-06-08 14:29:24
181
原创 算法-掉落的方块-线段树
第 2 个方块掉落后,最高的堆叠可以由方块 1 组成也可以由方块 2 组成,堆叠的最高高度为 100。第 3 个方块掉落后,最高的堆叠仍然由方块 1 和 2 组成,堆叠的最高高度为 5。第 2 个方块掉落后,最高的堆叠由方块 1 和 2 组成,堆叠的最高高度为 5。第 1 个方块掉落后,最高的堆叠由方块 1 组成,堆叠的最高高度为 100。第 1 个方块掉落后,最高的堆叠由方块 1 组成,堆叠的最高高度为 2。注意,方块 2 擦过方块 1 的右侧边,但不会算作在方块 1 上着陆。
2026-06-06 22:25:14
322
原创 算法-二叉树的最近公共祖先
中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。节点 5 和节点 1 的最近公共祖先是节点3。
2026-06-05 16:37:17
177
原创 算法-矩阵置零
题目暗示我们可以用常量的空间可以解决,但是又需要有额外的空间存储哪些行、哪些列有零。因此我们可以利用矩阵本身的数组,用第一列存储哪些行有零,存储的前提是需要一个标志位标志第一列本身是否有零。,则将其所在行和列的所有元素都设为。的矩阵,如果一个元素为。
2026-06-05 16:26:05
233
原创 算法-接雨水
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。在思考一段时间后,觉得可以去掉栈,但是本人没想到代码实现,但看了一个大佬的下面的代码。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。利用单调栈分层计算可以接的雨水,个非负整数表示每个宽度为。
2026-06-05 16:09:55
561
原创 redis分布式锁实现
返回值含义nil成功获取锁(首次获取或重入)正数(毫秒)无法获取锁,返回需要等待的时间负数(或0)等待超时或立即失败(由调用方解释)该脚本实现了公平、可重入、带超时的分布式锁,所有操作在 Redis 中原子执行,避免了竞态条件。
2026-06-05 15:47:06
228
原创 算法:矩形区域不超过k的数值和
的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。,找出并返回矩阵内部矩形区域的不超过。题目数据保证总会存在一个数值和不超过。蓝色边框圈出来的矩形区域。
2025-11-09 22:13:44
229
原创 算法:合并石头的最低成本
返回把所有石头合并成一堆的最低成本。如果无法合并成一堆,返回。合并 [3, 2],成本为 5,剩下 [5, 4, 1]。合并 [4, 1],成本为 5,剩下 [5, 5]。合并 [5, 5],成本为 10,剩下 [10]。堆石头合并为一堆,而这次移动的成本为这。从 [3, 2, 4, 1] 开始。总成本 20,这是可能的最小值。
2025-11-09 21:39:50
208
原创 算法:水位上升中的游泳池中游泳-二分+DFS
当然,在你游泳的时候你必须待在坐标方格里面。个人觉得这个算法题非常好,二分算法和DFS算法的结合,广度优先算法用于算最少的步骤,并不适合本题,但直接DFS暴力搜索,需要穷举所有的可能性才能得到最少时间,采用二分查找+DFS结合可以提升性能。等时间到达 3 时,你才可以游向平台 (1, 1). 因为此时的水位是 3,坐标方格中的平台没有比水位 3 更高的,所以你可以游向坐标方格中的任意位置。此时你不能游向任意方向,因为四个相邻方向平台的高度都大于当前时间为 0 时的水位。时间为0时,你位于坐标方格的位置为。
2025-11-09 11:36:02
189
原创 算法:雇佣K名工人的最低成本
我们向 0 号工人支付 70,向 2 号工人支付 35。组成满足上述条件的付费群体所需的最小金额。名工人的工作质量,其最低期望工资为。,由这个式子可以得到只要找到。与实际答案误差相差在。假设需要的支付的总薪资是。以内的答案将被接受。
2025-11-02 14:00:27
168
原创 贪心算法:IPO
为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。由于你最多可以选择两个项目,所以你需要完成 2 号项目以获得最大的资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。因此,输出最后最大化的资本,为 0 + 1 + 3 = 4。典型的贪心算法:在启动资金允许的范围内选择收益最大的项目。在完成后,你将获得 1 的利润,你的总资本将变为 1。由于你的初始资本为 0,你仅可以从 0 号项目开始。个不同项目后得到最大总资本的方式。个不同项目的列表,以。
2025-11-02 12:48:45
339
原创 算法:矩形面积II
从(1,1)到(2,2),绿色矩形和红色矩形重叠。如图所示,三个矩形覆盖了总面积为 6 的区域。任何被两个或多个矩形覆盖的区域应只计算。从(1,0)到(2,3),三个矩形都重叠。给你一个轴对齐的二维数组。因为答案可能太大,返回。线性扫描+线段树有花。
2025-10-26 17:16:36
184
原创 算法:并行课程II
上图展示了题目输入的图。在第一个学期中,我们可以上课程 2 和课程 3。然后第二个学期上课程 1 ,第三个学期上课程 4。请你返回上完所有课最少需要多少个学期。题目保证一定存在一种上完所有课的方式。门课,前提是这些课的先修课在之前的学期里已经上过了。表示一个先修课的关系,也就是课程。表示某所大学里课程的数目,编号为。
2025-10-25 22:02:15
325
原创 算法题:安排邮筒
下面的解题思路,刚开始学习的时候一直不理解,别人是怎么想到的,但是当自己尝试用DFS去做这个题,想到了上面的DFS大致代码时,瞬间理解了下面的动态规划思路。栋房子在一条街上的位置,现需要在这条街上安排。请你返回每栋房子与离它最近的邮筒之间的距离的。答案保证在 32 位有符号整数范围以内。
2025-10-25 21:10:25
263
原创 冗余连接 II
情况一:4-3这条边被后面遍历,2-3这边边的表示是2:parent[conflictEdge[1]], 3:conflictEdge[1]情况二:2-3这条边被后面遍历,存环判断代码没有走到,而是走了冲突边判断,这个时候就会变成有冲突但是没有环,2-3这条边就是冲突的边。
2025-09-07 16:49:32
239
原创 可怜的小猪
将水编号,选择其中一瓶水没有小猪喝,选择一瓶水2个小猪一起喝(从N小小猪中选2头),选择一瓶水3个小猪一起喝(从N小猪中选3头),一以类推到选择1瓶水所有小猪都喝,于是由二项式定理可得n个小猪喝一次水可以确定(1+1)^n瓶水中哪一瓶是毒药。将水编号,然后将编号转成二进制,每个小猪喝对应二进制位是1的水,这样n个小猪喝一次水就可以确定(1+1)^n瓶水中哪一瓶有毒。第二次:将对应进制为1的药水分给小猪喝,对应小猪死了,说明对应进制为1,否则不是。第一次、第二次小猪都没死,则说明对应进制为2。
2025-06-29 11:58:18
390
原创 算法题:最长递增子序列
的进阶版,用一个数组维护增长序列,那么这个增长序列数组就是有序的,就可以利用二分查找算法提升性能,另外题目的结果就是增长序列的长度,算法步骤:在遍历原数组的过程中,如果当前元素比增长序列数组的最后一个元素大就将当前元素加入增长序列数组,否责就在增长序列数组中就行二分查找,找到合适的位置,更新位置值为当前元素,这样做的目的是为了保证长度一样的情况下,保证递增序列的值最小,方便后续元素加入递增序列数组。---hard题解题思路。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。
2025-01-19 11:41:08
346
原创 算法题-最长连续序列
遍历数组的过程中,判断当前元素是不是某个连续区间的最小值(也可以是最大值),以最小值为例,就是判断数组中是否包含num[i]-1的值,不包含则当前元素是某个连续区间的最小值,然后通过一个内层循环求以当前元素为左边界(最小值)的连续区间长度。,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。最长数字连续序列是[1,2,3,4]。请你设计并实现时间复杂度为。给定一个未排序的整数数组。
2025-01-19 10:41:55
208
原创 算法题-非递减子序列
数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。set中不包含该当前元素,可以继续选择当前元素,也可以跳过当前元素。,找出并返回所有该数组中不同的递增子序列,递增子序列中。set中包含该当前元素,继续选择当前元素。可以继续选择当前元素,也可以跳过当前元素。1、如果当前元素<上次元素,跳过当前选择。思路:在递归的过程中并不需要用set去重。1、如果当前元素<上次元素,跳过当前选择。2、如果当前元素>=上次元素。2、如果当前元素>=上次元素。
2025-01-11 22:44:17
307
原创 面试题-用栈实现队列
面试过程:面试时第一版代码没有想到一个用于push,一个用于pop,面试官一直追问还可以优化吗?才想到leetCode题解中的思路,写出题解代码后面试官问能否写到线程安全,线程安全后依然要性能最优-临界区粒度最细。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(2、线程安全后性能最优。1、能否写成线程安全。
2024-12-29 21:06:00
253
原创 只出现一次的数字 II
你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。请你找出并返回那个只出现了一次的元素。外,其余每个元素都恰出现。
2024-12-28 17:45:45
178
原创 mysql字段varchar大小设置不合理踩坑线上问题
1、字段大小设置需要跟业务/产品讨论清楚,了解线上业务真实的字段值大小情况,避免设置太小出现线上问题。
2024-09-03 11:00:49
301
原创 mysql关于redo log和binlog作用的一些问题
InonoDB无法恢复数据,因为mysql将数据写入脏页,通过checkpoint机制进行刷盘,因此如果没有redolog,mysql的server层不知道事物是否已经刷盘,如果已经刷盘再次重做可能会带来数据一致性问题,如果没有刷盘,没有重做则会丢失数据,也许你会说那记录一下哪个binlog已经刷盘即可,这个记录文件就是另一种形式的redolog。redo log:1、InonoDB产生,非由mysql server层产生;binlog:1、主要用于主从复制;2、由mysql server层产生。
2024-06-11 17:28:54
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅