
工作级难度算法题解
文章平均质量分 94
以力扣周赛第三题为主。
软件架构师何志丹
我的源码、视频、博文、电子书可复用性、可理解性、可测试性皆强。优于工作,劣于竞赛。源码:https://gitcode.com/invite/link/a07392368f3a4ae295c0
展开
-
【离散化 前缀和 二分 滑动窗口】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 · 1958 阅读 · 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 · 1323 阅读 · 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 · 839 阅读 · 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 · 630 阅读 · 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 · 1368 阅读 · 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 · 575 阅读 · 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 · 624 阅读 · 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 · 774 阅读 · 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 · 654 阅读 · 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 · 1006 阅读 · 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 · 980 阅读 · 2 评论 -
【C++图论】2508. 添加边使所有节点度数都为偶数|2060
给你一个有 n 个节点的 无向 图,节点编号为 1 到 n 。再给你整数 n 和一个二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示节点 ai 和 bi 之间有一条边。图不一定连通。你可以给图中添加 至多 两条额外的边(也可以一条边都不添加),使得图中没有重边也没有自环。如果添加额外的边后,可以使得图中所有点的度数都是偶数,返回 true ,否则返回 false 。点的度数是连接一个点的边的数目。示例 1:原创 2025-02-04 07:00:00 · 595 阅读 · 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 · 2065 阅读 · 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 · 924 阅读 · 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 · 467 阅读 · 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 · 871 阅读 · 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 · 441 阅读 · 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 · 934 阅读 · 2 评论 -
【C++ 数学 括号匹配】2116. 判断一个括号字符串是否有效|2037
# LeetCode2116. 判断一个括号字符串是否有效一个括号字符串是只由 '(' 和 ')' 组成的 非空 字符串。如果一个字符串满足下面 任意 一个条件,那么它就是有效的:字符串为 ().它可以表示为 AB(A 与 B 连接),其中A 和 B 都是有效括号字符串。它可以表示为 (A) ,其中 A 是一个有效括号字符串。给你一个括号字符串 s 和一个字符串 locked ,两者长度都为 n 。locked 是一个二进制字符串,只包含 '0' 和 '1' 。对于 locked 中 每一个 下标原创 2025-01-31 17:00:00 · 1030 阅读 · 1 评论 -
【C++动态规划】2919. 使数组变美的最小增量运算数|2030
给你一个下标从 0 开始、长度为 n 的整数数组 nums ,和一个整数 k 。你可以执行下述 递增 运算 任意 次(可以是 0 次):从范围 [0, n - 1] 中选择一个下标 i ,并将 nums[i] 的值加 1 。如果数组中任何长度 大于或等于 3 的子数组,其 最大 元素都大于或等于 k ,则认为数组是一个 美丽数组 。以整数形式返回使数组变为 美丽数组 需要执行的 最小 递增运算数。子数组是数组中的一个连续 非空 元素序列。示例 1:输入:nums = [2,3,0,0,2],原创 2025-01-31 07:00:00 · 949 阅读 · 2 评论 -
【C++ 树状数组】2426. 满足不等式的数对数目|2030
给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两个数组的大小都为 n ,同时给你一个整数 diff ,统计满足以下条件的 数对 (i, j) :0 <= i < j <= n - 1 且nums1[i] - nums1[j] <= nums2[i] - nums2[j] + diff.请你返回满足条件的 数对数目 。示例 1:输入:nums1 = [3,2,5], nums2 = [2,2,1], diff = 1输出:3解释:总共有 3 个满足条件的数对:1. i =原创 2025-01-30 17:00:00 · 1491 阅读 · 0 评论 -
【C++动态规划 离散化】1626. 无矛盾的最佳球队|2027
假设你是球队的经理。对于即将到来的锦标赛,你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。然而,球队中的矛盾会限制球员的发挥,所以必须选出一支 没有矛盾 的球队。如果一名年龄较小球员的分数 严格大于 一名年龄较大的球员,则存在矛盾。同龄球员之间不会发生矛盾。给你两个列表 scores 和 ages,其中每组 scores[i] 和 ages[i] 表示第 i 名球员的分数和年龄。请你返回 所有可能的无矛盾球队中得分最高那支的分数 。示例 1:输入:scores = [1,3原创 2025-01-30 07:00:00 · 3302 阅读 · 32 评论 -
【C++位运算 试填法】1734. 解码异或后的排列|2024
给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] = perm[i] XOR perm[i + 1] 。比方说,如果 perm = [1,3,2] ,那么 encoded = [2,1] 。给你 encoded 数组,请你返回原始数组 perm 。题目保证答案存在且唯一。示例 1:输入:encoded = [3,1]输出:[1,2,3]解释:如果 perm = [1,2,3原创 2025-01-29 17:00:00 · 1206 阅读 · 1 评论 -
【C++动态规划 状态压缩】2597. 美丽子集的数目|2033
给你一个由正整数组成的数组 nums 和一个 正 整数 k 。如果 nums 的子集中,任意两个整数的绝对差均不等于 k ,则认为该子数组是一个 美丽 子集。返回数组 nums 中 非空 且 美丽 的子集数目。nums 的子集定义为:可以经由 nums 删除某些元素(也可能不删除)得到的一个数组。只有在删除元素时选择的索引不同的情况下,两个子集才会被视作是不同的子集。示例 1:输入:nums = [2,4,6], k = 2输出:4解释:数组 nums 中的美丽子集有:[2], [4], [6原创 2025-01-29 07:00:00 · 1571 阅读 · 0 评论 -
【C++动态规划 状态压缩】2741. 特别的排列|2020
给你一个下标从 0 开始的整数数组 nums ,它包含 n 个 互不相同 的正整数。如果 nums 的一个排列满足以下条件,我们称它是一个特别的排列:对于 0 <= i < n - 1 的下标 i ,要么 nums[i] % nums[i+1] == 0 ,要么 nums[i+1] % nums[i] == 0 。请你返回特别排列的总数目,由于答案可能很大,请将它对 10^9^ + 7 取余 后返回。示例 1:输入:nums = [2,3,6]输出:2解释:[3,6,2] 和 [2,6,3] 是原创 2025-01-28 17:00:00 · 763 阅读 · 0 评论 -
【C++动态规划】2547. 拆分数组的最小代价|2019
给你一个整数数组 nums 和一个整数 k 。将数组拆分成一些非空子数组。拆分的 代价 是每个子数组中的 重要性 之和。令 trimmed(subarray) 作为子数组的一个特征,其中所有仅出现一次的数字将会被移除。例如,trimmed([3,1,2,4,3,4]) = [3,4,3,4] 。子数组的 重要性 定义为 k + trimmed(subarray).length 。例如,如果一个子数组是 [1,2,3,3,3,4,4] ,trimmed([1,2,3,3,3,4,4]) = [3,3原创 2025-01-28 07:00:00 · 803 阅读 · 1 评论 -
【C++数论】880. 索引处的解码字符串|2010
给定一个编码字符串 s 。请你找出 解码字符串 并将其写入磁带。解码时,从编码字符串中 每次读取一个字符 ,并采取以下步骤:如果所读的字符是字母,则将该字母写在磁带上。如果所读的字符是数字(例如 d),则整个当前磁带总共会被重复写 d-1 次。现在,对于给定的编码字符串 s 和索引 k,查找并返回解码字符串中的第 k 个字母。示例 1:输入:s = "leet2code3", k = 10输出:"o"解释:解码后的字符串为 "leetleetcodeleetleetcodeleetleetc原创 2025-01-27 17:00:00 · 1096 阅读 · 2 评论 -
【C++ 动态规划】1024. 视频拼接|1746
你将会获得一系列视频片段,这些片段来自于一项持续时长为 time 秒的体育赛事。这些片段可能有所重叠,也可能长度不一。使用数组 clips 描述所有的视频片段,其中 clips[i] = [starti, endi] 表示:某个视频片段开始于 starti 并于 endi 结束。甚至可以对这些片段自由地再剪辑:例如,片段 [0, 7] 可以剪切成 [0, 1] + [1, 3] + [3, 7] 三部分。我们需要将这些片段进行再剪辑,并将剪辑后的内容拼接成覆盖整个运动过程的片段([0, time])原创 2025-01-27 07:00:00 · 2429 阅读 · 14 评论 -
【C++图论】1761. 一个图中连通三元组的最小度数|2005
给你一个无向图,整数 n 表示图中节点的数目,edges 数组表示图中的边,其中 edges[i] = [ui, vi] ,表示 ui 和 vi 之间有一条无向边。一个 连通三元组 指的是 三个 节点组成的集合且这三个点之间 两两 有边。连通三元组的度数 是所有满足此条件的边的数目:一个顶点在这个三元组内,而另一个顶点不在这个三元组内。请你返回所有连通三元组中度数的 最小值 ,如果图中没有连通三元组,那么返回 -1 。示例 1:原创 2025-01-26 17:00:00 · 1211 阅读 · 3 评论 -
【C++动态规划 网格】2328. 网格图中递增路径的数目|2001
给你一个 m x n 的整数网格图 grid ,你可以从一个格子移动到 4 个方向相邻的任意一个格子。请你返回在网格图中从 任意 格子出发,达到 任意 格子,且路径中的数字是 严格递增 的路径数目。由于答案可能会很大,请将结果对 10^9^ + 7 取余 后返回。如果两条路径中访问过的格子不是完全相同的,那么它们视为两条不同的路径。示例 1:输入:grid = [[1,1],[3,4]]输出:8解释:严格递增路径包括:- 长度为 1 的路径:[1],[1],[3],[4] 。- 长度为 2原创 2025-01-26 07:00:00 · 859 阅读 · 3 评论 -
【C++动态规划 排序】823. 带因子的二叉树|1899
给出一个含有不重复整数元素的数组 arr ,每个整数 arr[i] 均大于 1。用这些整数来构建二叉树,每个整数可以使用任意次数。其中:每个非叶结点的值应等于它的两个子结点的值的乘积。满足条件的二叉树一共有多少个?答案可能很大,返回 对 109 + 7 取余 的结果。示例 1:输入: arr = [2, 4]输出: 3解释: 可以得到这些二叉树: [2], [4], [4, 2, 2]示例 2:输入: arr = [2, 4, 5, 10]输出: 7解释: 可以得到这些二叉树: [2],原创 2025-01-25 17:00:00 · 1085 阅读 · 1 评论 -
【C++动态规划】696. 跳跃游戏 VI|1954
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i + 1, min(n - 1, i + k)] 包含 两个端点的任意位置。你的目标是到达数组最后一个位置(下标为 n - 1 ),你的 得分 为经过的所有数字之和。请你返回你能得到的 最大得分 。原创 2025-01-25 07:00:00 · 785 阅读 · 1 评论 -
【C++图论 最短路】2642. 设计可以求最短路径的图类|1810
给你一个有 n 个节点的 有向带权 图,节点编号为 0 到 n - 1 。图中的初始边用数组 edges 表示,其中 edges[i] = [fromi, toi, edgeCosti] 表示从 fromi 到 toi 有一条代价为 edgeCosti 的边。请你实现一个 Graph 类:Graph(int n, int[][] edges) 初始化图有 n 个节点,并输入初始边。addEdge(int[] edge) 向边集中添加一条边,其中 edge = [from, to, edgeCost]原创 2025-01-24 17:00:00 · 828 阅读 · 1 评论 -
【C++图论】2685. 统计完全连通分量的数量|1769
给你一个整数 n 。现有一个包含 n 个顶点的 无向 图,顶点按从 0 到 n - 1 编号。给你一个二维整数数组 edges 其中 edges[i] = [ai, bi] 表示顶点 ai 和 bi 之间存在一条 无向 边。返回图中 完全连通分量 的数量。如果在子图中任意两个顶点之间都存在路径,并且子图中没有任何一个顶点与子图外部的顶点共享边,则称其为 连通分量 。如果连通分量中每对节点之间都存在一条边,则称其为 完全连通分量 。原创 2025-01-24 07:00:00 · 1232 阅读 · 2 评论 -
【C++图论 并集查找】2492. 两个城市间路径的最小分数|1679
给你一个正整数 n ,表示总共有 n 个城市,城市从 1 到 n 编号。给你一个二维数组 roads ,其中 roads[i] = [ai, bi, distancei] 表示城市 ai 和 bi 之间有一条 双向 道路,道路距离为 distancei 。城市构成的图不一定是连通的。两个城市之间一条路径的 分数 定义为这条路径中道路的 最小 距离。城市 1 和城市 n 之间的所有路径的 最小 分数。注意:一条路径指的是两个城市之间的道路序列。一条路径可以 多次 包含同一条道路,你也可以沿着路径多次原创 2025-01-23 17:00:00 · 1289 阅读 · 0 评论 -
【C++ 数论】1363. 形成三的最大倍数|1822
给你一个整数数组 digits,你可以通过按 任意顺序 连接其中某些数字来形成 3 的倍数,请你返回所能得到的最大的 3 的倍数。由于答案可能不在整数数据类型范围内,请以字符串形式返回答案。如果无法得到答案,请返回一个空字符串。返回的结果不应包含不必要的前导零。示例 1:输入:digits = [8,1,9]输出:"981"示例 2:输入:digits = [8,6,7,1,0]输出:"8760"示例 3:输入:digits = [1]输出:""示例 4:输入:digits = [0原创 2025-01-22 17:00:00 · 482 阅读 · 1 评论 -
【C++ 子数组】1567. 乘积为正数的最长子数组长度|1710
给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。请你返回乘积为正数的最长子数组长度。示例 1:输入:nums = [1,-2,-3,4]输出:4解释:数组本身乘积就是正数,值为 24 。示例 2:输入:nums = [0,1,-2,-3,-4]输出:3解释:最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6 。注意,我们不能把 0 也包括到子数组中,因为这样乘积为 0 ,不是正数。示例 3:原创 2025-01-22 07:00:00 · 570 阅读 · 0 评论 -
【C++最大字段和】2321. 拼接数组的最大分数|1790
给你两个下标从0开始的整数数组nums1和nums2,长度都是n。你可以选择两个整数left和right,其中0<=left<=right<n,接着交换两个子数组nums1[left...right]和nums2[left...right]。例如,设nums1=[1,2,3,4,5]和nums2=[11,12,13,14,15],整数选择left=1和right=2,那么nums1会变为[1,12,13,4,5]而原创 2025-01-21 17:00:00 · 703 阅读 · 0 评论 -
【C++前后缀分解 最大子段和】918. 环形子数组的最大和|1777
给定一个长度为n的环形整数数组nums,返回nums的非空子数组的最大可能和。环形数组意味着数组的末端将会与开头相连呈环状。形式上,nums[i]的下一个元素是nums[(i+1)%n],nums[i]的前一个元素是nums[(i-1+n)%n]。子数组最多只能包含固定缓冲区nums中的每个元素一次。形式上,对于子数组nums[i],nums[i+1],...,nums[j],不存在i<=k1,k2<=j其中k1原创 2025-01-21 07:00:00 · 714 阅读 · 0 评论