工作级难度算法题解
文章平均质量分 94
以力扣周赛第三题为主。
软件架构师何志丹
我的源码、视频、博文、电子书可复用性、可理解性、可测试性皆强。优于工作,劣于竞赛。源码:https://gitcode.com/invite/link/a07392368f3a4ae295c0
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数位dp】3747. 统计移除零后不同整数的数目|1848
本文通过数位动态规划方法解决统计移除零后不同整数数目的问题。给定整数n,统计1到n中移除所有0后的不同整数数量。使用模板化的数位DP类CUperrDP进行状态枚举,遇到含0的数则忽略。示例显示n=10时有9个不同结果(1-9),n=3时为3(1-3)。代码实现了高效的状态转移和结果统计,时间复杂度适用于大数(1≤n≤10^15)。测试用例验证了算法正确性,适用于处理大规模数据。原创 2025-11-18 07:00:00 · 731 阅读 · 0 评论 -
【贪心 图论】517. 超级洗衣机|分数未知
假设有 n 台超级洗衣机放在同一排上。开始的时候,每台洗衣机内可能有一定量的衣服,也可能是空的。在每一步操作中,你可以选择任意 m (1 <= m <= n) 台洗衣机,与此同时将每台洗衣机的一件衣服送到相邻的一台洗衣机。给定一个整数数组 machines 代表从左至右每台洗衣机中的衣物数量,请给出能让所有洗衣机中剩下的衣物的数量相等的 最少的操作步数 。如果不能使每台洗衣机中衣物的数量相等,则返回 -1 。原创 2025-11-15 17:00:00 · 1856 阅读 · 0 评论 -
【并集查找 逆向思维 贪心】3607. 电网维护|1700
给你一个整数 c,表示 c 个电站,每个电站有一个唯一标识符 id,从 1 到 c 编号。这些电站通过 n 条 双向 电缆互相连接,表示为一个二维数组 connections,其中每个元素 connections[i] = [ui, vi] 表示电站 ui 和电站 vi 之间的连接。直接或间接连接的电站组成了一个 电网 。最初,所有 电站均处于在线(正常运行)状态。另给你一个二维数组 queries,其中每个查询属于以下 两种类型之一 :[1, x]:请求对电站 x 进行维护检查。如果电站原创 2025-11-15 07:00:00 · 594 阅读 · 0 评论 -
【贪心 从一般到特殊】3644. 排序排列|1775
给你一个长度为 n 的整数数组 nums,其中 nums 是范围 [0..n - 1] 内所有数字的一个 排列 。你可以在满足条件 nums[i] AND nums[j] == k 的情况下交换下标 i 和 j 的元素,其中 AND 表示按位与操作,k 是一个非负整数。返回可以使数组按 非递减 顺序排序的最大值 k(允许进行任意次这样的交换)。如果 nums 已经是有序的,返回 0。排列 是数组所有元素的一种重新排列。原创 2025-11-13 17:00:00 · 930 阅读 · 0 评论 -
【字符串 最长公共前缀】3720大于 target 的最小字典序排列|1953
给你两个长度均为 n 且仅由小写英文字母组成的字符串 s 和 target。返回 s 的 字典序最小的排列,要求该排列 严格 大于 target。如果 s 不存在任何字典序严格大于 target 的排列,则返回一个空字符串。如果两个长度相同的字符串 a 和 b 在它们首次出现不同字符的位置上,字符串 a 对应的字母在字母表中出现在 b 对应字母的 后面 ,则字符串 a 字典序严格大于 字符串 b。排列 是字符串中所有字符的一种重新排列。原创 2025-11-11 07:00:00 · 1417 阅读 · 1 评论 -
【贪心 从特殊到一般】3012. 通过操作使数组长度最小|1833
给你一个下标从 0 开始的整数数组 nums ,它只包含 正 整数。你的任务是通过进行以下操作 任意次 (可以是 0 次) 最小化 nums 的长度:在 nums 中选择 两个不同 的下标 i 和 j ,满足 nums[i] > 0 且 nums[j] > 0 。将结果 nums[i] % nums[j] 插入 nums 的结尾。将 nums 中下标为 i 和 j 的元素删除。请你返回一个整数,它表示进行任意次操作以后 nums 的 最小长度 。原创 2025-11-09 07:00:00 · 723 阅读 · 0 评论 -
【贪心 特殊到一般】1702. 修改后的最大二进制字符串|1825
给你一个二进制字符串 binary ,它仅有 0 或者 1 组成。你可以使用下面的操作任意次对它进行修改: 操作 1 :如果二进制串包含子字符串 "00" ,你可以用 "10" 将其替换。 比方说, "00010" -> "10010" 操作 2 :如果二进制串包含子字符串 "10" ,你可以用 "01" 将其替换。 比方说, "00010" -> "00001"请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 x 对应的十进制数原创 2025-11-08 17:00:00 · 1479 阅读 · 0 评论 -
【贪心 特殊到一般 进制】2568. 最小无法得到的或值|1754
给你一个下标从 0 开始的整数数组 nums 。如果存在一些整数满足 0 <= index1 < index2 < ... < indexk < nums.length ,得到 nums[index1] | nums[index2] | ... | nums[indexk] = x ,那么我们说 x 是 可表达的 。换言之,如果一个整数能由 nums 的某个子序列的或运算得到,那么它就是可表达的。请你返回 nums 不可表达的 最小非零整数 。示例 1:输入:nums = [2,1]输出:4解释原创 2025-11-08 07:00:00 · 704 阅读 · 0 评论 -
【贪心 从特殊到一般】2202. K 次操作后最大化顶端元素|1717
给你一个下标从 0 开始的整数数组 nums ,它表示一个 堆 ,其中 nums[0] 是堆顶的元素。每一次操作中,你可以执行以下操作 之一 : 如果堆非空,那么 删除 堆顶端的元素。 如果存在 1 个或者多个被删除的元素,你可以从它们中选择任何一个,添加 回堆顶,这个元素成为新的堆顶元素。同时给你一个整数 k ,它表示你总共需要执行操作的次数。请你返回 恰好 执行 k 次操作以后,堆顶元素的 最大值 。如果执行完 k 次操作以后,堆一定为空,请你返回 -1 。原创 2025-11-07 15:30:00 · 943 阅读 · 0 评论 -
【贪心 均值不等式】1969. 数组元素的最小非零乘积|1967
给你一个正整数 p 。你有一个下标从 1 开始的数组 nums ,这个数组包含范围 [1, 2p - 1] 内所有整数的二进制形式(两端都 包含)。你可以进行以下操作 任意 次: 从 nums 中选择两个元素 x 和 y 。 选择 x 中的一位与 y 对应位置的位交换。对应位置指的是两个整数 相同位置 的二进制位。比方说,如果 x = 1101 且 y = 0011 ,交换右边数起第 2 位后,我们得到 x = 1111 和 y = 0001 。请你算出进行以上操作 任意次 以后,nu原创 2025-11-07 07:00:00 · 722 阅读 · 0 评论 -
【反悔贪心】LCP 30. 魔塔游戏|分数未知
小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造成伤害值,即血量减少对应数值;0 表示房间对血量无影响。小扣初始血量为 1,且无上限。假定小扣原计划按房间编号升序访问所有房间补血/打怪,为保证血量始终为正值,小扣需对房间访问顺序进行调整,每次仅能将一个怪物房间(负数的房间)调整至访问顺序末尾。请返回小扣最少需要调整几次,才能顺利访问所有房间。若调整顺序也无法访问完全部原创 2025-11-06 07:00:00 · 1808 阅读 · 45 评论 -
【贪心 字典序】3720. 大于目标字符串的最小字典序排列|1958
给你两个长度均为 n 且仅由小写英文字母组成的字符串 s 和 target。返回 s 的 字典序最小的排列,要求该排列 严格 大于 target。如果 s 不存在任何字典序严格大于 target 的排列,则返回一个空字符串。如果两个长度相同的字符串 a 和 b 在它们首次出现不同字符的位置上,字符串 a 对应的字母在字母表中出现在 b 对应字母的 后面 ,则字符串 a 字典序严格大于 字符串 b。排列 是字符串中所有字符的一种重新排列。原创 2025-11-05 17:00:00 · 1551 阅读 · 0 评论 -
【贪心 字典序】2434. 使用机器人打印字典序最小的字符串|1953
给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串: 删除字符串 s 的 第一个 字符,并将该字符给机器人。机器人把这个字符添加到 t 的尾部。 删除字符串 t 的 最后一个 字符,并将该字符给机器人。机器人将该字符写到纸上。请你返回纸上能写出的字典序最小的字符串。原创 2025-11-05 07:00:00 · 564 阅读 · 0 评论 -
【二分查找 容斥原理】3733. 完成所有送货任务的最少时间|1973
给你两个大小为 2 的整数数组:d = [d1, d2] 和 r = [r1, r2]。两架送货无人机负责完成特定数量的送货任务。无人机 i 必须完成 di 次送货。每次送货花费 正好 一小时,并且在任何给定小时内 只有一架 无人机可以送货。此外,两架无人机都需要在特定时间间隔进行充电,在此期间它们不能送货。无人机 i 必须每 ri 小时充电一次(即在 ri 的倍数小时进行充电)。返回完成所有送货所需的 最小 总时间(以小时为单位)的整数。原创 2025-11-04 07:00:00 · 761 阅读 · 1 评论 -
【区间贪心 区间覆盖】1326. 灌溉花园的最少水龙头数目|1885
在 x 轴上有一个一维的花园。花园长度为 n,从点 0 开始,到点 n 结束。花园里总共有 n + 1 个水龙头,分别位于 [0, 1, ..., n] 。给你一个整数 n 和一个长度为 n + 1 的整数数组 ranges ,其中 ranges[i] (下标从 0 开始)表示:如果打开点 i 处的水龙头,可以灌溉的区域为 [i - ranges[i], i + ranges[i]] 。请你返回可以灌溉整个花园的 最少水龙头数目 。如果花园始终存在无法灌溉到的地方,请你返回 -1 。原创 2025-11-03 17:00:00 · 717 阅读 · 0 评论 -
【区间贪心 排序】2580. 统计将重叠区间合并成组的方案数|1632
给你一个二维整数数组 ranges ,其中 ranges[i] = [starti, endi] 表示 starti 到 endi 之间(包括二者)的所有整数都包含在第 i 个区间中。你需要将 ranges 分成 两个 组(可以为空),满足: 每个区间只属于一个组。 两个有 交集 的区间必须在 同一个 组内。如果两个区间有至少 一个 公共整数,那么这两个区间是 有交集 的。 比方说,区间 [1, 3] 和 [2, 5] 有交集,因为 2 和 3 在两个区间中都被包含。原创 2025-11-02 17:00:00 · 868 阅读 · 0 评论 -
【区间贪心】3394. 判断网格图能否被切割成块|1916
给你一个整数 n 表示一个 n x n 的网格图,坐标原点是这个网格图的左下角。同时给你一个二维坐标数组 rectangles ,其中 rectangles[i] 的格式为 [startx, starty, endx, endy] ,表示网格图中的一个矩形。每个矩形定义如下: (startx, starty):矩形的左下角。 (endx, endy):矩形的右上角。注意 ,矩形相互之间不会重叠。你的任务是判断是否能找到两条 要么都垂直要么都水平 的 两条切割线 ,满足: 切割得到的原创 2025-11-02 07:00:00 · 522 阅读 · 0 评论 -
【前缀和】3728. 边界与内部和相等的稳定子数组|1909
给你一个整数数组 capacity。当满足以下条件时,子数组 capacity[l..r] 被视为 稳定 数组: 其长度 至少 为 3。 首 元素与 尾 元素都等于它们之间所有元素的 和(即 capacity[l] = capacity[r] = capacity[l + 1] + capacity[l + 2] + ... + capacity[r - 1])。返回一个整数,表示 稳定子数组 的数量。子数组 是数组中的连续且非空的元素序列。原创 2025-10-28 17:00:00 · 1638 阅读 · 1 评论 -
【C++贪心 扩展决策范围 分治法】122. 买卖股票的最佳时机 II|中等难度2
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。然而,你可以在 同一天 多次买卖该股票,但要确保你持有的股票不超过一股。返回 你能获得的 最大 利润 。原创 2025-10-27 17:00:00 · 961 阅读 · 0 评论 -
【单调向量 单调栈】3676. 碗子数组的数目|1848
给你一个整数数组 nums,包含 互不相同 的元素。nums 的一个子数组 nums[l...r] 被称为 碗(bowl),如果它满足以下条件: 子数组的长度至少为 3。也就是说,r - l + 1 >= 3。 其两端元素的 最小值 严格大于 中间所有元素的 最大值。也就是说,min(nums[l], nums[r]) > max(nums[l + 1], ..., nums[r - 1])。返回 nums 中 碗 子数组的数量。子数组 是数组中连续的元素序列。原创 2025-10-16 17:00:00 · 635 阅读 · 0 评论 -
【BFS 离散化】3690拆分合并数组|1982
给你两个长度为 n 的整数数组 nums1 和 nums2。你可以对 nums1 执行任意次下述的 拆分合并操作: 选择一个子数组 nums1[L..R]。 移除该子数组,留下前缀 nums1[0..L-1](如果 L = 0 则为空)和后缀 nums1[R+1..n-1](如果 R = n - 1 则为空)。 将移除的子数组(按原顺序)重新插入到剩余数组的 任意 位置(即,在任意两个元素之间、最开始或最后面)。返回将 nums1 转换为 nums2 所需的 最少拆分合并操作 次数原创 2025-09-22 17:00:00 · 701 阅读 · 0 评论 -
【离散化 前缀和 二分 滑动窗口】P2862 [USACO06JAN] Corral the Cows G|普及+
Farmer John 希望为他的奶牛们建立一个畜栏。这些挑剔的奶牛要求畜栏必须是正方形的,而且至少要包含 $C$ 片三叶草,来当做它们的下午茶。约翰的土地里一共包含 $N$ 片三叶草,每单位三叶草位于一个 $1\times 1$ 的土地区域内。坐标都为整数,范围在 $1$ 到 $10000$ 以内。**多片的三叶草可能会位于同一个 $1\times 1$ 的区域内,所以在输入内,同一个区域坐标可能出现多次。**请你帮 Farmer John 计算一下,在能包含至少 $C$ 片三叶草的情况下原创 2025-05-22 07:00:00 · 2026 阅读 · 0 评论 -
【C++图论】1976. 到达目的地的方案数|2094
你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。给你一个整数 n 和二维整数数组 roads ,其中 roads[i] = [ui, vi, timei] 表示在路口 ui 和 vi 之间有一条需要花费 timei 时间才能通过的道路。你想知道花费 最少时间 从路口 0 出发到达路口 n - 1 的方案数。请返回花费 最少时间 到达目的地的 路径数目 。由于答案可能很大,将原创 2025-04-14 17:00:00 · 1392 阅读 · 0 评论 -
【C++图论 分支界限法】1786. 从第一个节点出发到最后一个节点的受限路径数|2078
Farmer John 的奶牛们已经厌倦了他对她们每天早上排好序离开牛棚的要求。她们刚刚完成了量子物理学的博士学位,准备将这一过程搞快点。今天早上,如同往常一样,Farmer John 的 $N$ 头编号为 $1 \ldots N$ 的奶牛($1 \leq N \leq 10^5$),分散在牛棚中 $N$ 个编号为 $1 \ldots N$ 的不同位置,奶牛 $i$ 位于位置 $p_i$。但是今天早上还出现了 $M$ 个编号为 $1 \ldots M$ 的虫洞($1 \leq M \leq 10^5$)原创 2025-03-20 17:00:00 · 908 阅读 · 0 评论 -
【C++前缀和】1906. 查询差绝对值的最小值|2146
一个数组 a 的 差绝对值的最小值 定义为:0 <= i < j < a.length 且 a[i] != a[j] 的 |a[i] - a[j]| 的 最小值。如果 a 中所有元素都 相同 ,那么差绝对值的最小值为 -1 。比方说,数组 [5,2,3,7,2] 差绝对值的最小值是 |2 - 3| = 1 。注意答案不为 0 ,因为 a[i] 和 a[j] 必须不相等。给你一个整数数组 nums 和查询数组 queries ,其中 queries[i] = [li, ri] 。对于每个查询 i ,计算原创 2025-02-15 17:00:00 · 695 阅读 · 0 评论 -
【C++前缀和】1074. 元素和为目标值的子矩阵数量|2189
给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。如果 (x1, y1, x2, y2) 和 (x1', y1', x2', y2') 两个子矩阵中部分坐标不同(如:x1 != x1'),那么这两个子矩阵也不同。示例 1: * (b XOR x) 的 最大值 且 x 需要满足 0 <= x < 2n。由于答案可能会很大,返回它对 10^9^ + 7 取余 后的结果。注意,XOR 是按位异或操作。示例 1:输入:a = 12, b = 5, n = 4输出:98解释:当 x = 2 时,(a XOR x) = 14 且 (b XOR x) = 7 。所以,(a XOR x) * (b XOR x) = 98 。98 是所有满足 0 <= x < 2n原创 2025-02-09 17:00:00 · 1432 阅读 · 1 评论 -
【C++ 图论 最短路】3123. 最短路径中的边|2093
给你一个 n 个节点的无向带权图,节点编号为 0 到 n - 1 。图中总共有 m 条边,用二维数组 edges 表示,其中 edges[i] = [ai, bi, wi] 表示节点 ai 和 bi 之间有一条边权为 wi 的边。对于节点 0 为出发点,节点 n - 1 为结束点的所有最短路,你需要返回一个长度为 m 的 boolean 数组 answer ,如果 edges[i] 至少 在其中一条最短路上,那么 answer[i] 为 true ,否则 answer[i] 为 false 。请你返回数原创 2025-02-08 17:00:00 · 646 阅读 · 1 评论 -
【分治法】3240. 最少翻转次数使二进制矩阵回文 II|2080
给你一个 m x n 的二进制矩阵 grid 。如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。你可以将 grid 中任意格子的值 翻转 ,也就是将格子里的值从 0 变成 1 ,或者从 1 变成 0 。请你返回 最少 翻转次数,使得矩阵中 所有 行和列都是 回文的 ,且矩阵中 1 的数目可以被 4 整除 。示例 1:输入:grid = [[1,0,0],[0,1,0],[0,0,1]]输出:3原创 2025-02-08 07:00:00 · 674 阅读 · 1 评论 -
【前后缀分解 + 滑动窗口】2555. 两个线段获得的最多奖品|2080
在 X轴 上有一些奖品。给你一个整数数组 prizePositions ,它按照 非递减 顺序排列,其中 prizePositions[i] 是第 i 件奖品的位置。数轴上一个位置可能会有多件奖品。再给你一个整数 k 。你可以同时选择两个端点为整数的线段。每个线段的长度都必须是 k 。你可以获得位置在任一线段上的所有奖品(包括线段的两个端点)。注意,两个线段可能会有相交。比方说 k = 2 ,你可以选择线段 [1, 3] 和 [2, 4] ,你可以获得满足 1 <= prizePositions[i]原创 2025-02-06 17:00:00 · 807 阅读 · 1 评论 -
【C++ 树状数组 康托展开】1850. 邻位交换的最小次数|2073
给你一个表示大整数的字符串 num ,和一个整数 k 。如果某个整数是 num 中各位数字的一个 排列 且它的 值大于 num ,则称这个整数为 妙数 。可能存在很多妙数,但是只需要关注 值最小 的那些。例如,num = "5489355142" :第 1 个最小妙数是 "5489355214"第 2 个最小妙数是 "5489355241"第 3 个最小妙数是 "5489355412"第 4 个最小妙数是 "5489355421"返回要得到第 k 个 最小妙数 需要对 num 执行的 相邻位数原创 2025-02-05 17:00:00 · 695 阅读 · 0 评论 -
【C++动态规划】3154. 到达第 K 级台阶的方案数|2071
给你有一个 非负 整数 k 。有一个无限长度的台阶,最低 一层编号为 0 。Alice 有一个整数 jump ,一开始值为 0 。Alice 从台阶 1 开始,可以使用 任意 次操作,目标是到达第 k 级台阶。假设 Alice 位于台阶 i ,一次 操作 中,Alice 可以:向下走一级到 i - 1 ,但该操作 不能 连续使用,如果在台阶第 0 级也不能使用。向上走到台阶 i + 2jump 处,然后 jump 变为 jump + 1 。请你返回 Alice 到达台阶 k 处的总方案数。注意,A原创 2025-02-05 07:00:00 · 1090 阅读 · 1 评论 -
【C++动态规划】1770. 执行乘法运算的最大分数|2060
给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m ,数组下标 从 1 开始 计数。初始时,你的分数为 0 。你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要:选择数组 nums 开头处或者末尾处 的整数 x 。你获得 multipliers[i] * x 分,并累加到你的分数中。将 x 从数组 nums 中移除。在执行 m 步操作后,返回 最大 分数。示例 1:输入:nums = [1,2,3], multiplie原创 2025-02-04 17:00:00 · 1047 阅读 · 2 评论 -
【C++图论】2508. 添加边使所有节点度数都为偶数|2060
给你一个有 n 个节点的 无向 图,节点编号为 1 到 n 。再给你整数 n 和一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条边。图不一定连通。你可以给图中添加 至多 两条额外的边(也可以一条边都不添加),使得图中没有重边也没有自环。如果添加额外的边后,可以使得图中所有点的度数都是偶数,返回 true ,否则返回 false 。点的度数是连接一个点的边的数目。示例 1:原创 2025-02-04 07:00:00 · 640 阅读 · 0 评论 -
【C++动态规划】1473. 粉刷房子 III|2056
在一个小城市里,有 m 个房子排成一排,你需要给每个房子涂上 n 种颜色之一(颜色编号为 1 到 n )。有的房子去年夏天已经涂过颜色了,所以这些房子不可以被重新涂色。我们将连续相同颜色尽可能多的房子称为一个街区。(比方说 houses = [1,2,2,3,3,2,1,1] ,它包含 5 个街区 [{1}, {2,2}, {3,3}, {2}, {1,1}] 。)给你一个数组 houses ,一个 m * n 的矩阵 cost 和一个整数 target ,其中:houses[i]:是第 i 个房子原创 2025-02-03 17:00:00 · 2156 阅读 · 2 评论 -
【C++离线查询 小根堆】2542. 最大子序列的分数|2056
给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都是 n ,再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k 的 子序列 对应的下标。对于选择的下标 i0 ,i1 ,..., ik - 1 ,你的 分数 定义如下:nums1 中下标对应元素求和,乘以 nums2 中下标对应元素的 最小值 。用公式表示: (nums1[i0] + nums1[i1] +...+ nums1[ik - 1]) * min(nums2[i0] , nums2[i1], ... ,n原创 2025-02-03 07:00:00 · 958 阅读 · 0 评论 -
【C++单调栈 前缀和】1856. 子数组最小乘积的最大值|2051
一个数组的 最小乘积 定义为这个数组中 最小值 乘以 数组的 和 。比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。给你一个正整数数组 nums ,请你返回 nums 任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 10^9^ + 7 取余 的结果。请注意,最小乘积的最大值考虑的是取余操作 之前 的结果。题目保证最小乘积的最大值在 不取余 的情况下可以用 64 位有符号整数 保存。子数组 定义为一个数组原创 2025-02-02 17:00:00 · 540 阅读 · 1 评论 -
【C++算法】1224. 最大相等频率|2050
# Leetcode1224. 最大相等频率给你一个正整数数组 nums,请你帮忙从该数组中找出能满足下面要求的 最长 前缀,并返回该前缀的长度:从前缀中 恰好删除一个 元素后,剩下每个数字的出现次数都相同。如果删除这个元素后没有剩余元素存在,仍可认为每个数字都具有相同的出现次数(也就是 0 次)。示例 1:输入:nums = [2,2,1,1,5,3,3,5]输出:7解释:对于长度为 7 的子数组 [2,2,1,1,5,3,3],如果我们从中删去 nums[4] = 5,就可以得到 [2,2原创 2025-02-02 07:00:00 · 936 阅读 · 1 评论 -
【C++ 区间位运算】3209. 子数组按位与值为 K 的数目|2050
# LeetCode3209. 子数组按位与值为 K 的数目给你一个整数数组 nums 和一个整数 k ,请你返回 nums 中有多少个子数组满足:子数组中所有元素按位 AND 的结果为 k 。示例 1:输入:nums = [1,1,1], k = 1输出:6解释:所有子数组都只含有元素 1 。示例 2:输入:nums = [1,1,2], k = 1输出:3解释:按位 AND 值为 1 的子数组包括:[1,1,2], [1,1,2], [1,1,2] 。示例 3:输入:nums原创 2025-02-01 17:00:00 · 489 阅读 · 1 评论 -
【C++ 算法】2735. 收集巧克力|2043
# LeetCode2735. 收集巧克力给你一个长度为 n、下标从 0 开始的整数数组 nums,nums[i] 表示收集位于下标 i 处的巧克力成本。每个巧克力都对应一个不同的类型,最初,位于下标 i 的巧克力就对应第 i 个类型。在一步操作中,你可以用成本 x 执行下述行为:同时修改所有巧克力的类型,将巧克力的类型 ith 修改为类型 ((i + 1) mod n)th。假设你可以执行任意次操作,请返回收集所有类型巧克力所需的最小成本。示例 1:输入:nums = [20,1,15], x原创 2025-02-01 07:00:00 · 982 阅读 · 2 评论
分享