![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Leetcode
文章平均质量分 84
感觉画质不如…原神
写文章主要目的是复习,欢迎各位大佬来找我交流
展开
-
Leetcode.1735 生成乘积数组的方案数
请你找出有多少种可行的方案。由于答案可能会很大,方案数需要对。我们可以发现,对于不同的质因子都可以单独计算。、每个元素都是正整数的数组,且满足所有元素的乘积为。个箱子,并且允许出现空箱子的放法有多少种。的所有质因数,也就是求出所有。给你一个二维整数数组。请你返回一个整数数组。那么我们就可以处理出。,最后计算方案即可。原创 2024-06-24 23:16:37 · 820 阅读 · 0 评论 -
Leetcode.2786 访问数组中的位置使分数最大
所以我们可以直接降维,使用两个变量来模拟。个元素,最后一个元素是奇数或者偶数。注意 ,你一开始的分数为。原创 2024-06-14 11:03:25 · 947 阅读 · 0 评论 -
Leetcode.2862 完全子集的最大元素和
分组,同一组内元素两两相乘都是完全平方数。直接遍历获取最大的和返回即可。,其中每对元素下标的乘积都是一个。是一个 完全平方数,那么。也是一个完全平方数。也是完全平方数,所以。依旧是一个完全平方数。也是一个完全平方数。就是一个完全平方数。原创 2024-06-13 16:32:34 · 1043 阅读 · 0 评论 -
Leetcode.2709 最大公约数遍历
将每一个元素 以及 他对应的质因数都合并到一起,表明他们是在一个集合中。,判断是否所有的元素都是在同一个集合中。这样才能保证,任何的。如果任意满足条件的下标对都可以遍历,那么返回。都会在同一个集合中。接着我们就可以通过判断。,你可以在一些下标之间遍历。时,我们可以在两个下标之间通行,其中。中的每一个元素都抽象成一个点,对应。,是否存在若干次通行可以从。是否在同一个集合中,来确定。的操作,就对应的变成了合并。数组中 任意 两个满足。内每个元素的质因数,记作。为了方便操作,在合并。,这样就避免了冲突。原创 2024-06-13 14:52:44 · 1113 阅读 · 0 评论 -
Leetcode.2601 质数减法运算
还必须是满足条件的最大质数。,也就是满足该条件的最大质数。选择一个之前未选过的下标。,并选择一个 严格小于。区间内所有的质数,存到。为前一个数,当前数为。等价于需要找到最后一个。原创 2024-06-12 11:30:32 · 1076 阅读 · 0 评论 -
Leetcode.866 回文质数
一个整数如果从左向右读和从右向左读是相同的,那么它是。测试用例保证答案总是存在,并且在。的基础之上,剩下的余数依旧是。原创 2024-06-06 22:23:50 · 830 阅读 · 0 评论 -
Leetcode.826 安排工作以达到最大收益
输入: difficulty = [2,4,6,8,10], profit = [10,20,30,40,50], worker = [4,5,6,7]在做了以上的预处理操作之后,我们在确定了工人可以选择的工作范围之后,同时也能得到最大收益。此时的最大收益就是工人能够选择最大难度工作对应的收益。解释: 工人被分配的工作难度是 [4,4,6,6] ,分别获得 [20,20,30,30] 的收益。排序了,所以可以通过二分的方式快速得到某一个工人可以选择工作的范围。按照上述的例子,工人的能力值。原创 2024-05-17 19:37:25 · 705 阅读 · 0 评论 -
Leetcode2466. 统计构造好字符串的方案数
解释:好字符串为 “00” ,“11” ,“000” ,“110” 和 “011”。输入:low = 3, high = 3, zero = 1, one = 1。输入:low = 2, high = 3, zero = 1, one = 2。可以这样构造得到:“” -> “0” -> “01” -> “011”。从 “000” 到 “111” 之间所有的二进制字符串都是好字符串。之间(包含上下边界)的字符串,那么这个字符串我们称为。按照定义,我们最终返回的就是。一个可能的好字符串是 “011”。原创 2024-04-02 20:41:15 · 983 阅读 · 0 评论 -
Leetcode.2369 检查数组是否存在有效划分
解释:数组可以划分成子数组 [4,4] 和 [4,5,6]。如果获得的这些子数组中每个都能满足下述条件。输入:nums = [4,4,4,5,6]这是一种有效划分,所以返回 true。输入:nums = [1,1,1,2],你必须将数组划分为一个或多个。只要上述三种情况有一个为真,那么。,即没有元素也是一种有效划分!,则可以称其为数组的一种。解释:该数组不存在有效划分。存在一种有效划分,返回。就是最终要返回的答案。原创 2024-03-02 15:12:52 · 785 阅读 · 1 评论 -
Leetcode.2735 收集巧克力
解释:我们将会按最初的成本收集全部三个类型的巧克力,而不需执行任何操作。因此,收集所有类型的巧克力需要的总成本是 1 + 2 + 3 = 6。接着,我们用成本 5 执行一次操作,巧克力的类型变更为 [1,2,0]。然后,我们用成本 5 执行一次操作,巧克力的类型变更为 [2,0,1]。因此,收集所有类型的巧克力需要的总成本是 (1 + 5 + 1 + 5 + 1) = 13。解释:最开始,巧克力的类型分别是 [0,1,2]。我们可以用成本 1 购买第 1 个类型的巧克力。原创 2023-12-29 21:28:31 · 1166 阅读 · 0 评论 -
Leetcode.2477 到达首都的最少油耗
输入:roads = [[3,1],[3,2],[1,0],[0,4],[0,5],[4,6]], seats = 2。城市里的代表可以选择乘坐所在城市的车,或者乘坐其他城市的车。个节点的树(一个无向、连通、无环图),每个节点表示一个城市,编号从。每个城市里有一个代表,他们都要去首都参加一个会议。辆车,为了用尽可能少的燃料,所以我们直接用。的边,经过的车越多,所消耗的燃料也就越多。由于我们求得是消耗的最少的燃料,假设以点。为根节点的子树上的所有节点都要经过边。开始遍历所有的边,记录总的燃料即可。原创 2023-12-05 22:15:12 · 482 阅读 · 0 评论 -
Leetcode.330 按要求补齐数组
现在如果我们将 2 添加到 nums 中, 组合变为: [1], [2], [3], [1,3], [2,3], [1,2,3]。其和可以表示数字 1, 2, 3, 4, 5, 6,能够覆盖 [1, 6] 区间里所有的数。根据 nums 里现有的组合 [1], [3], [1,3],可以得出 1, 3, 4。输入: nums = [1,5,10], n = 20。输入: nums = [1,2,2], n = 5。输入: nums = [1,3], n = 6。解释: 我们需要添加 [2,4]。原创 2023-12-03 16:15:37 · 212 阅读 · 0 评论 -
Leetcode.1542 找出最长的超赞子字符串
解释:“213123” 是最长的超赞子字符串,交换其中的字符后,可以得到回文 “231132”解释:“24241” 是最长的超赞子字符串,交换其中的字符后,可以得到回文 “24142”如果一个子串,在进行任意次的字符交换之后,能够变成回文串,相差一位的情况,求最大值。位的二进制数来表示对应数字字符的出现次数。的数字组成的,所以我们直接用一个。输入:s = “3242415”输入:s = “213123”这样的情况,记录到哈希表中。表示子串对应的二进制数。,对应的二进制数就是。输入:s = “00”原创 2023-11-26 21:19:04 · 450 阅读 · 0 评论 -
Leetcode.1590 使数组和能被 P 整除
解释:我们无法移除任何一个元素使得和被 9 整除,最优方案是移除子数组 [5,2] ,剩余元素为 [6,3],和为 9。我们可以移除子数组 [4] ,剩余元素的和为 6。输入:nums = [1000000000,1000000000,1000000000], p = 3。输入:nums = [3,1,4,2], p = 6。输入:nums = [6,3,5,2], p = 9。输入:nums = [1,2,3], p = 3。输入:nums = [1,2,3], p = 7。,值就是其对应的下标。原创 2023-11-26 17:08:53 · 309 阅读 · 0 评论 -
Leetcode.974 和可被 K 整除的子数组
输入:nums = [4,5,0,-2,-3,1], k = 5。在实现上,我们使用哈希表来记录前缀和出现的次数。输入: nums = [5], k = 9。为结尾的数组,我们只需要统计前面等于。,也需要统计它的出现次数,即。区间的子数组元素和可以被。,返回其中元素之和可被。整除的(连续、非空)原创 2023-11-26 16:17:12 · 258 阅读 · 0 评论 -
Leetcode.560 和为 K 的子数组
在实现上,我们使用哈希表来记录前缀和出现的次数。输入:nums = [1,1,1], k = 2。输入:nums = [1,2,3], k = 3。为结尾的数组,我们只需要统计前面等于。,也需要统计它的出现次数,即。区间的子数组元素和为。原创 2023-11-26 16:02:29 · 421 阅读 · 0 评论 -
Leetcode.275 H 指数 II
由于研究者有3篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 0, 1, 3, 5, 6 次。输入:citations = [0,1,3,5,6]输入:citations = [1,2,100]计算并返回该研究者的。篇论文分别被引用了至少。篇论文被引用的次数,代表“高引用次数”(原创 2023-10-30 22:18:56 · 252 阅读 · 0 评论 -
Leetcode.274 H 指数
由于研究者有 3 篇论文每篇 至少 被引用了 3 次,其余两篇论文每篇被引用 不多于 3 次,所以她的 h 指数是 3。解释:给定数组表示研究者总共有 5 篇论文,每篇论文相应的被引用了 3, 0, 6, 1, 5 次。输入:citations = [3,0,6,1,5]篇论文被引用的次数。计算并返回该研究者的。输入:citations = [1,3,1]代表“高引用次数” ,一名科研人员的。是指他(她)至少发表了。篇论文,并且每篇论文。原创 2023-10-29 22:19:54 · 313 阅读 · 0 评论 -
Leetcode.1465 切割后面积最大的蛋糕
输入:h = 5, w = 4, horizontalCuts = [1,2,4], verticalCuts = [1,3]输入:h = 5, w = 4, horizontalCuts = [3,1], verticalCuts = [1]解释:上图所示的矩阵蛋糕中,红色线表示水平和竖直方向上的切口。切割蛋糕后,绿色和黄色的两份蛋糕面积最大。解释:上图所示的矩阵蛋糕中,红色线表示水平和竖直方向上的切口。的那份蛋糕,并返回其 面积。用于相乘的这两项是独立的,所以我们可以先分别找到各自最大的一项,即。原创 2023-10-27 22:58:14 · 332 阅读 · 0 评论 -
Leetcode.2698 求一个整数的惩罚数
能否拆分成若个子字符串,能够满足这些子字符串的值加起来。我们直接回溯枚举每一个子串的分割位置,求出所有可能。,将其转换为字符串的长度为。定义为所有满足以下条件。个,所以时间复杂度为。原创 2023-10-25 23:01:01 · 699 阅读 · 0 评论 -
Leetcode.33 搜索旋转排序数组
输入:nums = [4,5,6,7,0,1,2], target = 0。输入:nums = [4,5,6,7,0,1,2], target = 3。输入:nums = [4,5,6,7,0,1,2], target = 3。,则返回它的下标,否则返回。是一个排好序的数组,将其。按升序排列,数组中的值。在预先未知的某个下标。原创 2023-10-22 09:31:29 · 213 阅读 · 0 评论 -
Leetcode.2316 统计无向图中无法互相到达点对数
输入:n = 7, edges = [[0,2],[0,5],[2,4],[1,6],[5,4]]输入:n = 3, edges = [[0,1],[0,2],[1,2]]解释:所有点都能互相到达,意味着没有点对无法互相到达,所以我们返回 0。的,说明两个点一定是在不同的。同时给你一个二维整数数组。无法到达的点对,假设其分别为。所以我们第一步就要求出所有的。,表示一张 无向图 中有。,那么这两个点一定是。所以我们返回 14。原创 2023-10-21 20:00:51 · 373 阅读 · 0 评论 -
Leetcode.19 删除链表的倒数第 N 个结点
由于可能弹出全部的节点,栈可能为空,所以我们要对边界条件做特殊处理。输入:head = [1,2,3,4,5], n = 2。输入:head = [1,2], n = 1。输入:head = [1], n = 1。个节点,此时栈顶节点就是 倒数第。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。个节点,这样就把 倒数第。输出:[1,2,3,5],先将所有链表节点入栈。个节点 指向 倒数第。分别指向 链表头节点。我们在删除这个 倒数第。原创 2023-10-19 19:07:06 · 269 阅读 · 0 评论 -
Leetcode.4 寻找两个正序数组的中位数
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。输入:nums1 = [1,2], nums2 = [3,4]由于我们是要找中位数,所以我们只需要找中间那个数,也就是第。输入:nums1 = [1,3], nums2 = [2]解释:合并数组 = [1,2,3] ,中位数 2。请你找出并返回这两个正序数组的 中位数。此时我们就可以使用二分,枚举从。的正序(从小到大)数组。算法的时间复杂度应该为。输出:2.00000。输出:2.50000。原创 2023-10-18 21:11:37 · 199 阅读 · 0 评论 -
Leetcode.260 只出现一次的数字 III
来进行上述的操作其实都可以的,想用哪个就用哪个。不过为了方便起见,直接使用最低位的那个。另外,由于其他元素都是成对出现的,所以每一对元素对。输入:nums = [1,2,1,3,2,5],结果都是一样的,也就是他们会被分到同一组。找出只出现一次的那两个元素。分别出现一次,其他元素都出现了两次。解释:[5, 3] 也是有效的答案。输入:nums = [-1,0]输入:nums = [0,1]所以通过这个 ,我们就可以将。,因为相同的元素异或为0。我们可以通过以下操作得到。,最后的结果实际上就是。原创 2023-10-16 20:55:10 · 266 阅读 · 0 评论 -
Leetcode.2867 统计树中的合法路径数目
输入:n = 6, edges = [[1,2],[1,3],[2,4],[3,5],[3,6]]输入:n = 5, edges = [[1,2],[1,3],[2,4],[2,5]],那么我们就可以直接计算,不用再次遍历记录连通块节点的数量。,记录下已经计算过的连通块数量。节点的编号是质数,那么我们称路径。,每个连通块中的节点数量分别为。个节点的无向树,节点编号为。号连通块中的两个节点分别为。如果下一次有另外一个 质数点。出发,开始 dfs,访问。通过上述操作,可以将。原创 2023-10-11 23:13:59 · 451 阅读 · 0 评论 -
Leetcode.2866 美丽塔 II
输入:maxHeights = [6,5,3,9,2,7]输入:maxHeights = [3,2,5,5,2,3]输入:maxHeights = [5,3,4,1,1]假设当前遍历到的元素为。如果以下条件满足,我们称这些塔是。要求的方案中,高度和的最大值。,那么我们就要不断地弹出栈顶元素。满足以下条件,那么我们称数组。现在问题的关键在于如何求出。为了便于我们操作,我们将。你的任务是在坐标轴上建。为当前的栈顶元素,即。这一区间的值都应该是。原创 2023-10-11 21:30:10 · 308 阅读 · 2 评论 -
Leetcode.2731 移动机器人
1 秒后,机器人的位置为 [-1,-1,1]。现在下标为 0 的机器人开始往左移动,下标为 1 的机器人开始往右移动。现在下标为 1 的机器人开始往左移动,下标为 2 的机器人开始往右移动。下标为 0 和 1 的机器人之间距离为 abs(-3 - (-1)) = 2。下标为 0 和 2 的机器人之间的距离为 abs(-3 - 1) = 4。下标为 1 和 2 的机器人之间的距离为 abs(-1 - 1) = 2。也就是说,机器人视为无差别的。3 秒后,机器人的位置为 [-3,-1,1]。原创 2023-10-10 19:44:48 · 174 阅读 · 0 评论 -
Leetcode.2172 数组的最大与和
最大与和为 (1 AND 1) + (4 AND 1) + (2 AND 2) + (6 AND 2) + (3 AND 3) + (5 AND 3) = 1 + 0 + 2 + 2 + 3 + 1 = 9。解释:一个可行的方案是 [1, 1] 放入篮子 1 中,[3] 放入篮子 3 中,[4] 放入篮子 4 中,[7] 放入篮子 7 中,[10] 放入篮子 9 中。解释:一个可行的方案是 [1, 4] 放入篮子 1 中,[2, 6] 放入篮子 2 中,[3, 5] 放入篮子 3 中。原创 2023-10-08 19:13:59 · 226 阅读 · 0 评论 -
Leetcode.714 买卖股票的最佳时机含手续费
你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。输入:prices = [1, 3, 2, 8, 4, 9], fee = 2。总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8。输入:prices = [1,3,7,5,10,3], fee = 3。在此处卖出 prices[3] = 8。在此处买入 prices[4] = 4。,就是交易完成的时候多了一份手续费。代表了交易股票的手续费用。原创 2023-10-08 16:23:00 · 126 阅读 · 0 评论 -
Leetcode.309 买卖股票的最佳时机含冷冻期
设计一个算法计算出最大利润。解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]天完成了一笔交易(即卖出了持有的股票),那么最早只能在 第。输入: prices = [1,2,3,0,2]所以我们可以将其整体向后偏移一位,用。(你必须在再次购买前出售掉之前的股票)。输入: prices = [1]我们注意到:如果在第。天才能重新买入股票。原创 2023-10-08 15:57:07 · 125 阅读 · 0 评论 -
Leetcode.123 买卖股票的最佳时机 III
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。输入:prices = [3,3,5,0,0,3,1,4]个元素是一支给定的股票在第。原创 2023-10-07 21:20:36 · 151 阅读 · 0 评论 -
Leetcode.188 买卖股票的最佳时机 IV
解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3。解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2。输入:k = 2, prices = [3,2,6,5,0,3]原创 2023-10-07 20:58:49 · 111 阅读 · 0 评论 -
Leetcode.122 买卖股票的最佳时机 II
对于任何一个。原创 2023-10-07 15:42:21 · 120 阅读 · 0 评论 -
Leetcode.121 买卖股票的最佳时机
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。解释:在这种情况下, 没有交易完成, 所以最大利润为 0。设计一个算法来计算你所能获取的最大利润。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]买入这只股票,并选择在。原创 2023-10-07 14:47:29 · 150 阅读 · 0 评论 -
Leetcode.215 数组中的第K个最大元素
输入: [3,2,3,1,2,4,5,5,6], k = 4。输入: [3,2,1,5,6,4], k = 2。请注意,你需要找的是数组排序后的第。在递归到某一层中,已经确定了位置。,那么我们接下来只需要继续递归。个元素,遍历完成之后,堆里的。你必须设计并实现时间复杂度为。假设使用快速排序,排序区间。个最大的元素,而不是第。的排序,排序完成之后,,所以堆顶的元素就是第。原创 2023-09-24 20:07:29 · 151 阅读 · 0 评论 -
Leetcode.2522 将字符串分割成值不超过 K 的子字符串
解释:我们将字符串分割成子字符串 “16” ,“54” ,“6” 和 “2”。每个子字符串的值都小于等于 k = 60。个字符中,好分割的最少个数。按照定义,最终我们返回的答案就是。输入:s = “165462”, k = 60。尽可能的大,剩下的子串就更少,所能得到的。尽可能地大,这样最终的答案就是最少的。的分割满足以下条件,我们称它是一个。之间的数字组成,同时给你一个整数。不存在小于 4 个子字符串的好分割。所以贪心策略就是,每次分割的时候让。解释:这个字符串不存在好分割。我们每次分割的时候,让。原创 2023-09-22 10:32:05 · 361 阅读 · 0 评论 -
Leetcode.2591 将钱分给最多的儿童
美元美元被分配,由于所有的钱都必须被分配,所以剩余美元只能被分配到一个儿童身上,拥有。请你按照上述规则分配金钱,并返回 最多 有多少个儿童获得。,说明此时除了最后一个儿童,其他儿童都被分配了。美元,所以只能将其分到其他儿童身上, 拥有。美元即可,此时我们再计算出最多可以分配。解释:每个儿童都可以获得 8 美元。美元,只需要再给这些儿童每个分配。美元,分配到最后一个儿童身上就是。,表示你要将钱分配给多少个儿童。,说明此时所有儿童都被分配了。美元的儿童数量就要减一,即。美元的儿童数量就要减一,即。原创 2023-09-22 09:24:07 · 179 阅读 · 0 评论 -
Leetcode.2571 将整数减少到零需要的最少操作数
说明最后还有多个连续的。,你可以执行下述操作。原创 2023-09-21 11:06:23 · 274 阅读 · 0 评论 -
Leetcode.2008 出租车的最大盈利
输入:n = 20, rides = [[1,6,1],[3,10,2],[10,12,3],[11,12,2],[12,15,2],[13,18,1]]解释:我们可以接乘客 0 的订单,获得 5 - 2 + 4 = 7 元。输入:n = 5, rides = [[2,5,4],[1,5,1]],通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。注意:你可以在一个地点放下一位乘客,并在同一个地点接上另一位乘客。,请你返回在最优接单方案下,你能盈利。个地点从近到远编号为。,所能盈利的最大金额。原创 2023-09-20 11:45:23 · 154 阅读 · 0 评论