
LeetCode--medium
中等的题目
韩师学子--小倪
不要告诉别人你的计划,只需要让别人知道结果就行了。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2369. 检查数组是否存在有效划分
数组可以划分成子数组 [4,4] 和 [4,5,6]。如果获得的这些子数组中每个都能满足下述条件。这是一种有效划分,所以返回 true。,你必须将数组划分为一个或多个。1、尝试使用递推,出现运行超时。,则可以称其为数组的一种。存在一种有效划分,返回。该数组不存在有效划分。2、使用动态规划解决。原创 2024-03-01 13:28:41 · 507 阅读 · 1 评论 -
2673. 使二叉树所有路径值相等的最小代价
两条路径已经有相等的路径值,所以不需要执行任何增加操作。总共增加次数为 1 + 3 + 2 = 6。每次操作,你可以将树中。从根到叶子的每一条路径值都为 9。树中每个节点都有一个值,用下标从。里面节点的数目,节点编号从。都有两个孩子,分别是左孩子。- 将节点 4 的值增加一次。- 将节点 3 的值增加三次。- 将节点 7 的值增加两次。需要执行增加操作多少次。,树中每个非叶子节点。你的目标是让根到每一个。原创 2024-02-28 13:03:14 · 439 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]6节点2和节点8的最近公共祖先是6。2节点2和节点4的最近公共祖先是2, 因为根据定义最近公共祖先节点可以为节点本身。原创 2024-02-26 12:40:28 · 387 阅读 · 0 评论 -
2583. 二叉树中的第 K 大层和
层次遍历,将每层结果汇总,再进行排序,获取第k大的和。,如果两个节点与根节点的距离相同,则认为它们在同一层。大的层和(不一定不同)。第 2 大的层和等于 13。给你一棵二叉树的根节点。最大的层和是 3。原创 2024-02-23 13:02:21 · 379 阅读 · 0 评论 -
889. 根据前序和后序遍历构造二叉树
是同一棵树的后序遍历,重构并返回二叉树。如果存在多个答案,您可以返回其中。值的二叉树的前序遍历,原创 2024-02-22 13:22:45 · 410 阅读 · 0 评论 -
106. 从中序与后序遍历序列构造二叉树
后序遍历的数组最后一个元素代表的即为根节点。可以利用已知的根节点信息在中序遍历的数组中找到根节点所在的下标,然后根据其将中序遍历的数组分成左右两部分,左边部分即左子树,右边部分为右子树,针对每个部分可以用同样的方法继续递归下去构造。可以理解为在后序遍历的数组中整个数组是先存储左子树的节点,再存储右子树的节点,最后存储根节点,如果按每次选择「后序遍历的最后一个节点」为根节点,则先被构造出来的应该为右子树。:这里有需要先创建右子树,再创建左子树的依赖关系。是二叉树的中序遍历,原创 2024-02-21 13:45:00 · 411 阅读 · 0 评论 -
590. N 叉树的后序遍历
方法一中利用递归来遍历树,实际的递归中隐式利用了栈,在此我们可以直接模拟递归中栈的调用。在后序遍历中从左向右依次先序遍历该每个以子节点为根的子树,然后先遍历节点本身。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值。给定一个 n 叉树的根节点。分隔(请参见示例)。原创 2024-02-19 11:33:53 · 426 阅读 · 0 评论 -
429. N 叉树的层序遍历
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。直接进行遍历,用临时变量保存所有下一层节点。给定一个 N 叉树,返回其节点值的。(即从左到右,逐层遍历)。原创 2024-02-18 13:49:18 · 538 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 II
删除原始链表中所有重复数字的节点,只留下不同的数字。给定一个已排序的链表的头。原创 2024-01-15 13:48:27 · 444 阅读 · 0 评论 -
2645. 构造有效字符串的最少插入数
在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 ",你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使。在每个 "a" 之后依次插入 "b" 和 "c" 可以得到有效字符串 "a。直接进行遍历字符串的每个字符,看能拼接成abc字符串时,还需要哪个字母。如果字符串可以由 "abc" 串联多次得到,则认为该字符串。word 已经是有效字符串,不需要进行修改。注意遇到ac时,只要多插个b就好。需要插入的最少字母数。原创 2024-01-11 09:29:44 · 492 阅读 · 0 评论 -
2397. 被列覆盖的最多行数
第 2 行未被覆盖,因为 matrix[2][1] == 1 但是 1 未存在于 s 中。- 第 3 行被覆盖,因为 matrix[2][2] == 1 且 2 存在于 s 中。- 第 1 行被覆盖,因为值为 1 的两列(即 0 和 2)均存在于 s 中。另外 s = {1, 2} 也可以覆盖 3 行,但可以证明无法覆盖更多行。选择唯一的一列,两行都被覆盖了,因为整个矩阵都被覆盖了。- 第 0 行被覆盖,因为其中没有出现 1。是你选择的列的集合。都被你选中的列所覆盖,则认为这一行被。原创 2024-01-04 17:56:55 · 423 阅读 · 0 评论 -
100097. 合法分组的最少组数
组 1 中,nums[0] == nums[2] == nums[4] ,所有下标对应的数值都相等。我们想将下标进行分组,使得 [0, n - 1] 内所有下标 i 都 恰好 被分到其中一组。无法得到一个小于 2 组的答案,因为如果只有 1 组,组内所有下标对应的数值都要相等。组 2 中,nums[1] == nums[3] ,所有下标对应的数值都相等。组 1 中下标数目为 3 ,组 2 中下标数目为 2。输入:nums = [10,10,10,3,1,1]输入:nums = [3,2,3,2,3]原创 2023-10-22 20:20:23 · 335 阅读 · 0 评论 -
100114. 元素和最小的山形三元组 II
【代码】100114. 元素和最小的山形三元组 II。原创 2023-10-22 19:34:20 · 240 阅读 · 0 评论 -
2530. 执行 K 次操作后的最大分数
最后分数是 10 + 10 + 10 + 10 + 10 = 50。第 1 步操作:选中 i = 1 ,nums 变为 [1,4,3,3,3]。第 2 步操作:选中 i = 1 ,nums 变为 [1,2,3,3,3]。第 3 步操作:选中 i = 2 ,nums 变为 [1,1,1,3,3]。将 nums[i] 替换为 ceil(nums[i] / 3)。输入:nums = [10,10,10,10,10], k = 5。输入:nums = [1,10,3,3,3], k = 3。原创 2023-10-18 09:31:10 · 129 阅读 · 0 评论 -
260. 只出现一次的数字 III
这个方法的原理在于,当对一个数 x 取反时,得到的 -x 在二进制表示上是 x 的按位取反加 1。因此,-x 的二进制表示中最低位的 1 对应的位置就是 x 中最低位的 1 的位置。通过与 x 进行按位与运算,可以将这个最低位的 1 提取出来。,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你必须设计并实现线性时间复杂度的算法且仅使用常量额外空间来解决此问题。),可以得到一个结果,其中只有最低位的 1 保留下来,其他位都为 0。将 x 的所有位都取反得到的值。原创 2023-10-16 12:44:45 · 144 阅读 · 0 评论 -
1488. 避免洪水泛滥
同时, [-1,-1,1,2,-1,-1] 也是另一个可行的没有洪水的方案。请注意,如果你选择抽干一个装满水的湖泊,它会变成一个空的湖泊。但第三天后,湖泊 1 和 2 都会再次下雨,所以不管我们第三天抽干哪个湖泊的水,另一个湖泊都会发生洪水。第二天后,装满水的湖泊包括 [1,2]。没有哪一天你可以抽干任何湖泊的水,也没有湖泊会发生洪水。第四天后,装满水的湖泊包括 [1,2,3,4]第三天后,装满水的湖泊包括 [1,2,3]第六天后,装满水的湖泊包括 [1,2]。第五天后,装满水的湖泊包括 [2]。原创 2023-10-13 13:30:38 · 110 阅读 · 0 评论 -
2512. 奖励最顶尖的 K 名学生
ID 为 1 的学生有 1 个正面词汇和 1 个负面词汇,所以得分为 3-1=2 分。两名学生都有 1 个正面词汇,都得到 3 分,学生 1 的 ID 更小所以排名更前。- ID 为 2 的学生有 1 个正面词汇,得分为 3 分。如果有多名学生分数相同,ID 越小排名越前。表示这名学生的 ID ,这名学生的评语是。学生 2 分数更高,所以返回 [2,1]。,分别包含表示正面的和负面的词汇。每个正面的单词会给学生的分数。分,每个负面的词会给学生的分数。有单词同时是正面的和负面的。原创 2023-10-11 09:13:58 · 123 阅读 · 0 评论 -
2731. 移动机器人
由于机器人之间并没有任何区别,相撞可以看做是穿透,原本左边的机器人相撞后交换为右边的机器人,原本右边的机器人相撞后交换为左边的机器人,这样一来,两个机器人仿佛没有相撞过。例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 2 并往左移动,下一秒,它们都将占据位置 1,并改变方向。例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 1 并往左移动,下一秒,第一个机器人位于位置 0 并往左行驶,而另一个机器人位于位置 1 并往右移动。1 秒后,机器人的位置为 [2,-1]。原创 2023-10-10 14:03:21 · 633 阅读 · 1 评论 -
2034. 股票价格波动
对于返回股票最新价格操作,我们可以维护最大的时间戳,用最大的时间戳在哈希表中查找,可以得到最新的股票价格。我们可以使用有序集合维护哈希表中的股票价格,有序集合中的最大值和最小值即为当前哈希表中的股票的最高和最低价格。由于可能有重复的股票价格,对于多重有序集合,可以额外记录每个股票价格的出现次数,在加入、删除股票价格时,更新有序集合中该股票价格的出现次数。// 时间戳为 [1,2] ,对应的股票价格为 [10,5]。// 时间戳为 [1,2,4] ,对应价格为 [3,5,2]。给你一支股票价格的数据流。原创 2023-10-08 12:30:00 · 183 阅读 · 0 评论 -
901. 股票价格跨度
栈的元素可以是股票价格的下标(即天数)和股票价格的二元数对,并且在栈中先插入一个最大值作为天数为 −1 天的价格,来保证栈不会为空。调用next时,先将栈中价格小于等于此时 price的元素都弹出,直到遇到一个大于 price 的值,并将 price 入栈,计算下标差返回。// 返回 4 ,因为截至今天的最后 4 个股价 (包括今天的股价 75) 都小于或等于今天的股价。设计一个算法收集某些股票的每日报价,并返回该股票当日价格的。原创 2023-10-07 09:00:06 · 240 阅读 · 0 评论 -
2560. 打家劫舍 IV
窃取能力最小的情况所对应的方式是窃取下标 0 和 4 处的房屋。返回 max(nums[0], nums[4]) = 2。- 窃取下标 0 和 2 处的房屋,窃取能力为 max(nums[0], nums[2]) = 5。- 窃取下标 0 和 3 处的房屋,窃取能力为 max(nums[0], nums[3]) = 9。- 窃取下标 1 和 3 处的房屋,窃取能力为 max(nums[1], nums[3]) = 9。表示每间房屋存放的现金金额。定义为他在窃取过程中能从单间房屋中窃取的。原创 2023-09-19 18:33:37 · 182 阅读 · 0 评论 -
337. 打家劫舍 III
之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为。小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7。小偷一晚能够盗取的最高金额 4 + 5 = 9。,小偷能够盗取的最高金额。原创 2023-09-18 14:01:40 · 174 阅读 · 0 评论 -
2596. 检查骑士巡视方案
骑士行动时可以垂直移动两个格子且水平移动一个格子,或水平移动两个格子且垂直移动一个格子。下图展示了骑士从某个格子出发可能的八种行动路线。格子是固定个数,每个格子只能走一次,意味巡视条件时,每个数字只会出现一次。直接进行格子数遍历,判断每次走的格子是否满足条件。grid 如上图所示,考虑到骑士第 7 次行动后的位置,第 8 次行动是无效的。grid 如上图所示,可以证明这是一个有效的巡视方案。在有效的巡视方案中,骑士会从棋盘的。出发,并且访问棋盘上的每个格子。表示了骑士的有效巡视方案,返回。原创 2023-09-13 09:30:53 · 117 阅读 · 0 评论 -
1448. 统计二叉树中好节点的数目
好节点」X 定义为:从根到该节点 X 所经过的节点中,没有任何节点的值大于 X 的值。:直接进行递归,遍历左右子节点的值进行判断,注意根节点永远是个好节点,需要算上。节点 2 -> (3, 3, 2) 不是好节点,因为 "3" 比它大。节点 5 -> (3,4,5) 是路径中的最大值。节点 3 -> (3,1,3) 是路径中的最大值。节点 4 -> (3,4) 是路径中的最大值。的二叉树,请你返回二叉树中好节点的数目。根节点 (3) 永远是个好节点。图中蓝色节点为好节点。原创 2023-08-25 09:23:10 · 98 阅读 · 0 评论 -
1267. 统计参与通信的服务器
第一行的两台服务器互相通信,第三列的两台服务器互相通信,但右下角的服务器无法与其他服务器通信。如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。请你统计并返回能够与至少一台其他服务器进行通信的服务器的数量。所有这些服务器都至少可以与一台别的服务器进行通信。中,1 表示单元格上有服务器,0 表示没有。这里有一幅服务器分布图,服务器的位置标识在。没有一台服务器能与其他服务器进行通信。原创 2023-08-24 08:48:42 · 309 阅读 · 0 评论 -
849. 到最近的人的最大距离
如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2。亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。如果亚历克斯坐在其它任何一个空位上,他到离他最近的人的距离为 1。如果亚历克斯坐在最后一个座位上,他离最近的人有 3 个座位远。至少有一个空座位,且至少有一人已经坐在座位上。因此,他到离他最近的人的最大距离是 2。这是可能的最大距离,所以答案是 3。2、坐在最后一个空位上,此时最大;返回他到离他最近的人的最大距离。1、坐在第一个空位上,此时最大;原创 2023-08-22 08:28:16 · 109 阅读 · 0 评论 -
2337. 移动片段得到字符串
但是,在这一步之后,不存在可以移动的片段,所以无法从字符串 start 得到 target。字符串 start 中的片段只能向右移动,所以无法从字符串 start 得到 target。可以从字符串 start 得到 target ,所以返回 true。- 将最后一个片段向右移动一步,字符串现在变为 "L___R___字符串 start 中的 'R' 片段可以向右移动一步得到 "_- 将第二个片段向右移动散步,字符串现在变为 "L______- 将第一个片段向左移动一步,字符串现在变为 "原创 2023-08-21 12:58:26 · 121 阅读 · 0 评论 -
2453. 摧毁一系列目标
余数 + 哈希表统计原创 2022-11-01 23:19:33 · 217 阅读 · 0 评论 -
2452. 距离字典两次编辑以内的单词
暴力枚举原创 2022-11-01 22:39:46 · 246 阅读 · 0 评论 -
6029. 射箭比赛中的最大得分
Alice 和 Bob 是一场射箭比赛中的对手。比赛规则如下:Alice 先射numArrows支箭,然后 Bob 也射numArrows支箭。 分数按下述规则计算: 箭靶有若干整数计分区域,范围从0到11(含0和11)。 箭靶上每个区域都对应一个得分k(范围是0到11),Alice 和 Bob 分别在得分k区域射中ak和bk支箭。如果ak>= bk,那么 Alice 得k分。如果ak< bk,则 Bob 得k分 ...原创 2022-03-20 12:55:40 · 771 阅读 · 0 评论 -
6028. 统计道路上的碰撞次数
在一条无限长的公路上有n辆汽车正在行驶。汽车按从左到右的顺序按从0到n - 1编号,每辆车都在一个独特的位置。给你一个下标从0开始的字符串directions,长度为n。directions[i]可以是'L'、'R'或'S'分别表示第i辆车是向左、向右或者停留在当前位置。每辆车移动时速度相同。碰撞次数可以按下述方式计算:当两辆移动方向相反的车相撞时,碰撞次数加2。 当一辆移动的车和一辆静止的车相撞时,碰撞次数加1。碰撞发生...原创 2022-03-20 12:45:50 · 520 阅读 · 0 评论 -
2170. 使数组变成交替数组的最少操作数
给你一个下标从0开始的数组nums,该数组由n个正整数组成。如果满足下述条件,则数组nums是一个交替数组:nums[i - 2] == nums[i],其中2 <= i <= n - 1。 nums[i - 1] != nums[i],其中1 <= i <= n - 1。在一步操作中,你可以选择下标i并将nums[i]更改为任一正整数。返回使数组变成交替数组的最少操作数。示例 1:输入:nums =...原创 2022-02-14 13:51:44 · 417 阅读 · 0 评论 -
6006. 拿出最少数目的魔法豆
给你一个正整数数组beans,其中每个整数表示一个袋子里装的魔法豆的数目。请你从每个袋子中拿出一些豆子(也可以不拿出),使得剩下的非空袋子中(即至少还有一颗魔法豆的袋子)魔法豆的数目相等。一旦魔法豆从袋子中取出,你不能将它放到任何其他的袋子中。请你返回你需要拿出魔法豆的最少数目。示例 1:输入:beans = [4,1,6,5]输出:4解释:- 我们从有 1 个魔法豆的袋子中拿出 1 颗魔法豆。 剩下袋子中魔法豆的数目为:[4,0,6,5]- 然...原创 2022-02-13 23:52:10 · 290 阅读 · 0 评论 -
5991. 按符号重排数组
给你一个下标从0开始的整数数组nums,数组长度为偶数,由数目相等的正整数和负整数组成。你需要重排nums中的元素,使修改后的数组满足下述条件:任意连续的两个整数符号相反 对于符号相同的所有整数,保留它们在nums中的顺序。 重排后数组以正整数开头。重排元素满足上述条件后,返回修改后的数组。示例 1:输入:nums = [3,1,-2,-5,2,-4]输出:[3,-2,1,-5,2,-4]解释:nums 中的正整数是 [3,1,2] ,负整数是...原创 2022-01-23 12:41:06 · 402 阅读 · 0 评论 -
5990. 找出数组中的所有孤独数字
给你一个整数数组nums。如果数字x在数组中仅出现一次,且没有相邻数字(即,x + 1和x - 1)出现在数组中,则认为数字x是孤独数字。返回nums中的所有孤独数字。你可以按任何顺序返回答案。示例 1:输入:nums = [10,6,5,8]输出:[10,8]解释:- 10 是一个孤独数字,因为它只出现一次,并且 9 和 11 没有在 nums 中出现。- 8 是一个孤独数字,因为它只出现一次,并且 7 和 9 没有在 nums 中出现。- ...原创 2022-01-23 12:32:16 · 650 阅读 · 0 评论 -
5940. 从数组中移除最大值和最小值
给你一个下标从0开始的数组nums,数组由若干互不相同的整数组成。nums中有一个值最小的元素和一个值最大的元素。分别称为最小值和最大值。你的目标是从数组中移除这两个元素。一次删除操作定义为从数组的前面移除一个元素或从数组的后面移除一个元素。返回将数组中最小值和最大值都移除需要的最小删除次数。示例 1:输入:nums = [2,10,7,5,4,1,8,6]输出:5解释:数组中的最小元素是 nums[5] ,值为 1 。数组中的最大...原创 2021-11-28 13:40:17 · 3089 阅读 · 0 评论 -
5939. 半径为 k 的子数组平均值
给你一个下标从0开始的数组nums,数组中有n个整数,另给你一个整数k。半径为 k 的子数组平均值是指:nums中一个以下标i为中心且半径为k的子数组中所有元素的平均值,即下标在i - k和i + k范围(含i - k和i + k)内所有元素的平均值。如果在下标i前或后不足k个元素,那么半径为 k 的子数组平均值是-1。构建并返回一个长度为n的数组avgs,其中avgs[i]是以下标i为中心的子数组的半径为 k ...原创 2021-11-28 13:35:52 · 199 阅读 · 0 评论 -
5186. 区间内查询数字的频率
请你设计一个数据结构,它能求出给定子数组内一个给定值的频率。子数组中一个值的频率指的是这个子数组中这个值的出现次数。请你实现RangeFreqQuery类:RangeFreqQuery(int[] arr)用下标从0开始的整数数组arr构造一个类的实例。 int query(int left, int right, int value)返回子数组arr[left...right]中value的频率。一个子数组指的是数组中一段连续的元素。arr[le...原创 2021-11-21 14:10:52 · 544 阅读 · 0 评论 -
5201. 给植物浇水
你打算用一个水罐给花园里的n株植物浇水。植物排成一行,从左到右进行标记,编号从0到n - 1。其中,第i株植物的位置是x = i。x = -1处有一条河,你可以在那里重新灌满你的水罐。每一株植物都需要浇特定量的水。你将会按下面描述的方式完成浇水:按从左到右的顺序给植物浇水。 在给当前植物浇完水之后,如果你没有足够的水完全浇灌下一株植物,那么你就需要返回河边重新装满水罐。 你不能提前重新灌满水罐。最初,你在河边(也就是,x = -1),在 x 轴上每移动一个单...原创 2021-11-21 13:21:35 · 438 阅读 · 1 评论 -
5928. 解码斜向换位密码
字符串originalText使用斜向换位密码,经由行数固定为rows的矩阵辅助,加密得到一个字符串encodedText。originalText先按从左上到右下的方式放置到矩阵中。先填充蓝色单元格,接着是红色单元格,然后是黄色单元格,以此类推,直到到达originalText末尾。箭头指示顺序即为单元格填充顺序。所有空单元格用' '进行填充。矩阵的列数需满足:用originalText填充之后,最右侧列不为空。接着按行将字符附加到矩阵中,构造e...原创 2021-11-14 12:19:23 · 478 阅读 · 0 评论