- 博客(21)
- 收藏
- 关注
原创 LeetCode每日一题之3261. 统计满足 K 约束的子字符串数量 II
我们设置两个计数器 count[0] 和 count[1] 来记录当前窗口中的 0 和 1 数量,当任一字符的数量超过 k 时,就缩小窗口左边界。窗口内满足条件的所有子字符串数量都存储在 prefix 数组中,其中 prefix[i] 表示从 0 到 i-1 索引的子字符串数量的前缀和。该问题的目标是统计字符串 s 的子字符串数量,这些子字符串中包含的 0 和 1 的数量都不超过给定的整数 k。处理查询时,对于每个区间 [l, r],分为两部分:第一部分是以 l 为起点的满足条件的子字符串数量;
2024-11-13 11:38:11
209
原创 LeetCode每日一题之3258. 统计满足 K 约束的子字符串数量 I
给定一个由字符 ‘0’ 和 ‘1’ 组成的字符串 s,要求所有子字符串中的 ‘0’ 或 ‘1’ 的数量最多为 k。为了解决此问题,我们可以采用滑动窗口的方法,对不同长度的子字符串进行统计。滑动窗口:对于长度 len 超过 k 的子字符串,统计窗口中 0 和 1 的数量。判断窗口中的字符数是否满足 0 或 1 的数量不超过 k,若满足则计入结果。初始统计:首先计算长度在 [n-k+1, n] 范围内的子字符串数量,直接加到结果 ans 中,因为这些长度较短的子字符串自动满足要求。
2024-11-12 10:54:11
159
原创 LeetCode每日一题之1547. 切棍子的最小成本
该分割操作的代价是 cuts[j + 1] - cuts[i - 1],然后将代价分为两个子问题 f[i][k-1] 和 f[k+1][j]。木棍的长度为 n,并给出一系列预定的切割点 cuts,每次切割的成本是木棍的当前长度。初始化和边界:先将切割点按顺序排列,然后在切割点数组 cuts 的开头添加 0,末尾添加 n,表示木棍的两端。状态定义:用 f[i][j] 表示在区间 [cuts[i], cuts[j]] 内完成所有切割的最小成本。最终解:f[1][m] 表示在完整区间内的最小切割成本。
2024-11-11 10:27:38
198
原创 LeetCode每日一题之540.有序数组中的单一元素
本题要求找到一个在排序数组 nums 中唯一只出现一次的元素。由于数组中的其他元素均成对出现,我们可以利用二分查找的思想高效地解决此问题。
2024-11-10 10:57:13
242
原创 LeetCode每日一题之3242. 设计相邻元素求和服务
计算相邻元素之和:adjacentSum 函数通过调用 findLocation 获取目标元素的位置 [i, j],然后分别检查上、下、左、右四个方向上的元素。计算对角元素之和:diagonalSum 函数同样调用 findLocation 来获取目标位置 [i, j],然后检查左上、右上、左下、右下四个方向的元素是否在边界内。对于有效的对角元素,将其值累加到 ans 中,并返回结果。本题的目标是实现一个 NeighborSum 类,该类用于查找给定二维数组 grid 中某个数值的邻接元素和对角元素的和。
2024-11-09 11:13:20
210
原创 LeetCode每日一题之3255. 长度为 K 的子数组的能量值 Ⅱ
根据题意可知,我们需要找到长度为 k 且满足连续上升的子数组中的最大元素,对于一个长度为n的数组而言,有n-k+1个这样的数组,且是从左往右 “滑动” 的,我们将这样一个长度为k的连续数组称之为窗口。那么就只需要判断每个窗口的是否满足连续上升,具体而言,判断长度为k的窗口是否存在k-1个连续上升对(例如[ 2,3] 是一个连续上升对)。那么是否需要对每个窗口单独遍历进行判断呢?对于每个窗口的upk值进行判断,若其值为k-1,那么将窗口最右边的元素插入返回数组中,否则将 -1插入返回数组中。
2024-11-07 10:48:54
275
原创 LeetCode每日一题之3254. 长度为 K 的子数组的能量值 I
根据题意可知,我们需要找到长度为 k 且满足连续上升的子数组中的最大元素,对于一个长度为n的数组而言,有n-k+1个这样的数组,且是从左往右 “滑动” 的,我们将这样一个长度为k的连续数组称之为窗口。那么就只需要判断每个窗口的是否满足连续上升,具体而言,判断长度为k的窗口是否存在k-1个连续上升对(例如[ 2,3] 是一个连续上升对)。那么是否需要对每个窗口单独遍历进行判断呢?对于每个窗口的upk值进行判断,若其值为k-1,那么将窗口最右边的元素插入返回数组中,否则将 -1插入返回数组中。
2024-11-06 20:13:18
346
原创 LeetCode每日一题之3222.求硬币游戏的赢家
具体而言,可以分别计算x/1和y/4,取两者商的最小值就是组合的数量。如果有奇数个这样的组合,由于是Alice先手,那么最后就是Alice拿走最后一组,而Bob无法执行此操作而输掉游戏,Alice获胜;如果是偶数个这样的组合,那么最后就是Bob赢得游戏;由于每次都要凑出价值115的总和,而硬币的面额只有75和10。简单分析可知,只能由1枚75的硬币和4枚10的硬币组成。那么每次比赛执行的最优策略就是拿走一枚75的硬币加上四枚10的硬币。那么怎么判断最后是谁赢呢?我们可以计算给出的总硬币中,有多少个75。
2024-11-05 09:22:54
213
原创 LeetCode每日一题之633.平方数之和
通过枚举 a 的值,则将题目转化为判断 是否存在一个完全平方数b。= c,那么我们可以假定a <= b,则a的取值范围就是[0,首先如果c可以写成两个平方数之和:a。
2024-11-04 10:19:32
171
原创 LeetCode每日一题之638.大礼包
假设一共n个物品,m个过滤后的礼包。这意味着,从n + m个礼包中选择任意一个后, 下一 -次继续从n + m个礼包中任意选。把原问题变成一个和原问题相似的规模更小的子问题。因此,我们使用记忆化搜索而不是完全遍历的方法,来计算出满足每个购物清单 needs 所需花费的最低价格。有可能买一个A物品需要5块钱,但是装有2个A的礼包需要15.5 元。这就是“坑货”,所以先过滤那些不实惠的礼包,再继续选择。重点:转化视角,将一个物品也看成一个礼包, 相当于容量为1的礼包。那么,本题就变成挑选礼包,恰好满足要求。
2024-11-03 20:57:39
446
原创 LeetCode每日一题之3226. 使两个整数相等的位更改次数
剩下的情况就是n > k. 对于这种情况, 只需要同步遍历两个整数的二进制位, 如果发现 n 的二进制位为1且k的二进制位为0, 答案ans累计加1;如果发现 n 的二进制位为 0 且 k 的二进制位为1, 直接输出 -1, 因为无法将 n 的位0改成位1。这道题要求将一个整数n通过改变它的二进制位变成整数k, 但是n的二进制位只能从1改为0, 这意味着位更改会使得n变小。
2024-11-02 11:25:39
285
原创 LeetCode每日一题之3259. 超级饮料的最大强化能量
在每个位置,我们可以选择喝当前种类的饮料并加上之前的最大能量值,或者选择切换饮料的种类而保持之前的最大能量值,对于每个小时的总能量最大值,取dpA和dpB种的较大者即可。这个问题可以通过动态规划来解决。我们定义两个数组dpA和dpB,分别表示在选择A和B两种能量饮料时的最大能量值。我们从第一个饮料开始遍历,依次更新dpA和dpB数组的值。最后,返回dpA和dpB的最后一个元素中的最大值作为最大能量值。
2024-11-01 22:25:23
234
原创 LeetCode每日一题之3165. 不包含相邻元素的子序列的最大和
对于每个结点t[l,r],表示区间为[l,r]。如果(l = r) 即单个值。它表示左右边界 l一定没有被选择 与 r没有限制(可选可不选),在线段树中该区间[l, r],由左子区间[l, m] 和 右子区间[m + 1, r]组成。= r) 即一个区间,那么有以下四种情况,以下t[l, r]代表区间[l, r]的最大值,区间是闭区间,m = [l + r] / 2。它表示左右边界l 与 r一定没有被选择,在线段树中该区间[l, r],由左子区间[l, m] 和 右子区间[m + 1, r]组成。
2024-10-31 20:32:19
910
原创 LeetCode每日一题之3216. 交换后字典序最小的字符串
此题要求通过一次相邻字符交换,使得字符串的字典序最小。那么可以从左往右遍历字符串,当发现相邻字符不满足递增关系且数字奇偶性相同时,交换这两个数字字符并返回结果。这样可以在保证奇偶性相同的前提下,尽可能地减小字符串的字典序。由于只需要一次交换,那么只需要从左往右找到符合条件的第一对数字字符即可。
2024-10-30 19:47:51
179
原创 LeetCode每日一题之3211. 生成不含相邻零的二进制字符串
种不同的二进制串,范围是 [0,2。那么可以遍历范围内中的。,那么将其二进制字符串加入答案。的二进制中,没有相邻的。
2024-10-29 17:19:02
220
原创 LeetCode每日一题之685. 冗余连接 II
这个问题是关于在有向图中找到冗余的连接。一个冗余的连接是指如果去掉这条边,图中的每个节点仍然可以从任何其他节点通过有向路径到达。
2024-10-28 15:43:27
223
原创 LeetCode每日一题之684. 冗余连接
解决“冗余连接”问题的解题思路主要基于并查集(Union-Find)数据结构的应用。这个问题的核心是在一个无向图中逐步添加边,并检测哪条边的添加会导致图中形成环。
2024-10-27 21:16:23
262
原创 leetcode每日一题之3181. 执行操作可获得的最大总奖励 Ⅱ
根据题设易知,要想获得的总奖励最大,必须按照递增的顺序对数据进行遍历,所以排序是一个必不可少的预处理步骤。然而,此题的数据规模增加,导致之前的做法会超时,故此时可以使用位运算优化动态规划。如果dp[j-x]为真,那么代表能够获得总奖励为j-x,只需要加上x,即可获得总奖励为j,即dp[j] = true。对于每个x,枚举j的所有可能[x, 2*x-1],即可填充完整dp数组。如果dp[j-x]为假,那么暂时认为不能获得总奖励j,即dp[j] = false。[j],故用位运算表示为f。
2024-10-26 17:25:07
288
原创 leetcode每日一题之3180. 执行操作可获得的最大总奖励 I
这是一道典型的动态规划题,可以将原问题分解成为子问题求解,关键在于如何确定dp数组所代表的含义和状态转移方程。根据题设易知,要想获得的总奖励最大,必须按照递增的顺序对数据进行遍历,所以排序是一个必不可少的预处理步骤。
2024-10-25 21:54:04
190
原创 leetcode每日一题之3175找到连续赢 K 场比赛的第一位玩家
因此,如果在前面没有人能够连续赢下 k 场,那么技能最高的玩家最终会获胜。需要注意的点是,如果当前检查的玩家不是第一个,那么已经至少赢过一场比赛,因为他是通过击败上一个玩家才到达当前位置的。此外,某个玩家后面的那些输掉比赛的玩家不可能赢,因为如果该玩家不是赢家,那么要么他后面有一个技能更高的玩家,要么那些更强的玩家距离该玩家不会超过 k 场比赛。给你一个长度为 n 的整数数组 skills 和一个 正 整数 k ,其中 skills[i] 是第 i 位玩家的技能等级。请你返回这个比赛的赢家编号。
2024-10-24 21:08:27
359
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人