2024年3月刷题记录
2024年3月1日
【leetcode】2369. 检查数组是否存在有效划分
题意:
给你一个下标从 0 开始的整数数组
nums,你必须将数组划分为一个或多个 连续 子数组。如果获得的这些子数组中每个都能满足下述条件 之一 ,则可以称其为数组的一种 有效 划分:
- 子数组 恰 由
2个相等元素组成,例如,子数组[2,2]。- 子数组 恰 由
3个相等元素组成,例如,子数组[4,4,4]。- 子数组 恰 由
3个连续递增元素组成,并且相邻元素之间的差值为1。例如,子数组[3,4,5],但是子数组[1,3,5]不符合要求。如果数组 至少 存在一种有效划分,返回
true,否则,返回false。
2024年3月2日
【leetcode】2368. 受限条件下可到达节点的数目
题意:
现有一棵由
n个节点组成的无向树,节点编号从0到n - 1,共有n - 1条边。给你一个二维整数数组
edges,长度为n - 1,其中edges[i] = [ai, bi]表示树中节点ai和bi之间存在一条边。另给你一个整数数组restricted表示 受限 节点。在不访问受限节点的前提下,返回你可以从节点
0到达的 最多 节点数目。注意,节点
0不 会标记为受限节点。
2024年3月3日
【leetcode】225. 用队列实现栈
题意:
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(
push、top、pop和empty)。实现
MyStack类:
void push(int x)将元素 x 压入栈顶。int pop()移除并返回栈顶元素。int top()返回栈顶元素。boolean empty()如果栈是空的,返回true;否则,返回false。注意:
- 你只能使用队列的基本操作 —— 也就是
push to back、peek/pop from front、size和is empty这些操作。- 你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
2024年3月4日
【leetcode】232. 用栈实现队列
题意:
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(
push、pop、peek、empty):实现
MyQueue类:
void push(int x)将元素 x 推到队列的末尾int pop()从队列的开头移除并返回元素int peek()返回队列开头的元素boolean empty()如果队列为空,返回true;否则,返回false说明:
- 你 只能 使用标准的栈操作 —— 也就是只有
push to top,peek/pop from top,size, 和is empty操作是合法的。- 你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
2024年3月5日
【leetcode】1976. 到达目的地的方案数
题意:
你在一个城市里,城市由
n个路口组成,路口编号为0到n - 1,某些路口之间有 双向 道路。输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。给你一个整数
n和二维整数数组roads,其中roads[i] = [ui, vi, timei]表示在路口ui和vi之间有一条需要花费timei时间才能通过的道路。你想知道花费 最少时间 从路口0出发到达路口n - 1的方案数。请返回花费 最少时间 到达目的地的 路径数目 。由于答案可能很大,将结果对
10^9 + 7取余 后返回。
2024年3月6日
【leetcode】2917. 找出数组中的 K-or 值
题意:
给你一个下标从 0 开始的整数数组
nums和一个整数k。
nums中的 K-or 是一个满足以下条件的非负整数:
- 只有在
nums中,至少存在k个元素的第i位值为 1 ,那么 K-or 中的第i位的值才是 1 。返回
nums的 K-or 值。注意 :对于整数
x,如果(2^i AND x) == 2^i,则x中的第i位值为 1 ,其中AND为按位与运算符。
2024年3月7日
【leetcode】2575. 找出字符串的可整除数组
题意:
给你一个下标从 0 开始的字符串
word,长度为n,由从0到9的数字组成。另给你一个正整数m。
word的 可整除数组div是一个长度为n的整数数组,并满足:
- 如果
word[0,...,i]所表示的 数值 能被m整除,div[i] = 1- 否则,
div[i] = 0返回
word的可整除数组。
2024年3月8日
【leetcode】2834. 找出美丽数组的最小和
题意:
给你两个正整数:
n和target。如果数组
nums满足下述条件,则称其为 美丽数组 。
nums.length == n.nums由两两互不相同的正整数组成。- 在范围
[0, n-1]内,不存在 两个 不同 下标i和j,使得nums[i] + nums[j] == target。返回符合条件的美丽数组所可能具备的 最小 和,并对结果进行取模
10^9 + 7。
2024年3月10日
【leetcode】299. 猜数字游戏
题意:
你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下:
写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示:
- 猜测数字中有多少位属于数字和确切位置都猜对了(称为 "Bulls",公牛),
- 有多少位属于数字猜对了但是位置不对(称为 "Cows",奶牛)。也就是说,这次猜测中有多少位非公牛数字可以通过重新排列转换成公牛数字。
给你一个秘密数字
secret和朋友猜测的数字guess,请你返回对朋友这次猜测的提示。提示的格式为
"xAyB",x是公牛个数,y是奶牛个数,A表示公牛,B表示奶牛。请注意秘密数字和朋友猜测的数字都可能含有重复数字。
2024年3月11日
【leetcode】2129. 将标题首字母大写
题意:
给你一个字符串
title,它由单个空格连接一个或多个单词组成,每个单词都只包含英文字母。请你按以下规则将每个单词的首字母 大写 :
- 如果单词的长度为
1或者2,所有字母变成小写。- 否则,将单词首字母大写,剩余字母变成小写。
请你返回 大写后 的
title。
2024年3月12日
【leetcode】1261. 在受污染的二叉树中查找元素
题意:
给出一个满足下述规则的二叉树:
root.val == 0- 如果
treeNode.val == x且treeNode.left != null,那么treeNode.left.val == 2 * x + 1- 如果
treeNode.val == x且treeNode.right != null,那么treeNode.right.val == 2 * x + 2现在这个二叉树受到「污染」,所有的
treeNode.val都变成了-1。请你先还原二叉树,然后实现
FindElements类:
FindElements(TreeNode* root)用受污染的二叉树初始化对象,你需要先把它还原。bool find(int target)判断目标值target是否存在于还原后的二叉树中并返回结果。
2024年3月13日
【leetcode】2864. 最大二进制奇数
题意:
给你一个 二进制 字符串
s,其中至少包含一个'1'。你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。
以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。
注意 返回的结果字符串 可以 含前导零。
2024年3月14日
【leetcode】2789. 合并后数组中的最大元素
题意:
给你一个下标从 0 开始、由正整数组成的数组
nums。你可以在数组上执行下述操作 任意 次:
- 选中一个同时满足
0 <= i < nums.length - 1和nums[i] <= nums[i + 1]的整数i。将元素nums[i + 1]替换为nums[i] + nums[i + 1],并从数组中删除元素nums[i]。返回你可以从最终数组中获得的 最大 元素的值。
2024年3月16日
【leetcode】2684. 矩阵中移动的最大次数
题意:
给你一个下标从 0 开始、大小为
m x n的矩阵grid,矩阵由若干 正 整数组成。你可以从矩阵第一列中的 任一 单元格出发,按以下方式遍历
grid:
- 从单元格
(row, col)可以移动到(row - 1, col + 1)、(row, col + 1)和(row + 1, col + 1)三个单元格中任一满足值 严格 大于当前单元格的单元格。返回你在矩阵中能够 移动 的 最大 次数。
2024年3月17日
【leetcode】310. 最小高度树
题意:
树是一个无向图,其中任何两个顶点只通过一条路径连接。 换句话说,一个任何没有简单环路的连通图都是一棵树。
给你一棵包含
n个节点的树,标记为0到n - 1。给定数字n和一个有n - 1条无向边的edges列表(每一个边都是一对标签),其中edges[i] = [ai, bi]表示树中节点ai和bi之间存在一条无向边。可选择树中任何一个节点作为根。当选择节点
x作为根节点时,设结果树的高度为h。在所有可能的树中,具有最小高度的树(即,min(h))被称为 最小高度树 。请你找到所有的 最小高度树 并按 任意顺序 返回它们的根节点标签列表。
树的 高度 是指根节点和叶子节点之间最长向下路径上边的数量。
2024年3月18日
【leetcode】303. 区域和检索 - 数组不可变
题意:
给定一个整数数组
nums,处理以下类型的多个查询:
- 计算索引
left和right(包含left和right)之间的nums元素的 和 ,其中left <= right实现
NumArray类:
NumArray(int[] nums)使用数组nums初始化对象int sumRange(int i, int j)返回数组nums中索引left和right之间的元素的 总和 ,包含left和right两点(也就是nums[left] + nums[left + 1] + ... + nums[right])
2024年3月19日
【leetcode】160. 相交链表
题意:
给你两个单链表的头节点
headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回null。题目数据 保证 整个链式结构中不存在环。
注意,函数返回结果后,链表必须 保持其原始结构 。
2024年3月20日
【leetcode】1969. 数组元素的最小非零乘积
题意:
给你一个正整数
p。你有一个下标从 1 开始的数组nums,这个数组包含范围[1, 2p - 1]内所有整数的二进制形式(两端都 包含)。你可以进行以下操作 任意 次:
- 从
nums中选择两个元素x和y。- 选择
x中的一位与y对应位置的位交换。对应位置指的是两个整数 相同位置 的二进制位。比方说,如果
x = 11*0*1且y = 00*1*1,交换右边数起第2位后,我们得到x = 11*1*1和y = 00*0*1。请你算出进行以上操作 任意次 以后,
nums能得到的 最小非零 乘积。将乘积对109 + 7取余 后返回。注意:答案应为取余 之前 的最小值。
2024年3月21日
【leetcode】2671. 频率跟踪器
题意:
请你设计并实现一个能够对其中的值进行跟踪的数据结构,并支持对频率相关查询进行应答。
实现
FrequencyTracker类:
FrequencyTracker():使用一个空数组初始化FrequencyTracker对象。void add(int number):添加一个number到数据结构中。void deleteOne(int number):从数据结构中删除一个number。数据结构 可能不包含number,在这种情况下不删除任何内容。bool hasFrequency(int frequency): 如果数据结构中存在出现frequency次的数字,则返回true,否则返回false。
2024年3月23日
【leetcode】2549. 统计桌面上的不同数字
题意:
给你一个正整数
n,开始时,它放在桌面上。在109天内,每天都要执行下述步骤:
- 对于出现在桌面上的每个数字
x,找出符合1 <= i <= n且满足x % i == 1的所有数字i。- 然后,将这些数字放在桌面上。
返回在
109天之后,出现在桌面上的 不同 整数的数目。注意:
- 一旦数字放在桌面上,则会一直保留直到结束。
%表示取余运算。例如,14 % 3等于2。
2024年3月24日
【leetcode】322. 零钱兑换
题意:
给你一个整数数组
coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回
-1。你可以认为每种硬币的数量是无限的。
2024年3月25日
【leetcode】518. 零钱兑换 II
题意:
给你一个整数数组
coins表示不同面额的硬币,另给一个整数amount表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回
0。假设每一种面额的硬币有无限个。
题目数据保证结果符合 32 位带符号整数。
2024年3月26日
【leetcode】2642. 设计可以求最短路径的图类
题意:
给你一个有
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]。数据保证添加这条边之前对应的两个节点之间没有有向边。int shortestPath(int node1, int node2)返回从节点node1到node2的路径 最小 代价。如果路径不存在,返回-1。一条路径的代价是路径中所有边代价之和。
2024年3月27日
【leetcode】2580. 统计将重叠区间合并成组的方案数
题意:
给你一个二维整数数组
ranges,其中ranges[i] = [starti, endi]表示starti到endi之间(包括二者)的所有整数都包含在第i个区间中。你需要将
ranges分成 两个 组(可以为空),满足:
- 每个区间只属于一个组。
- 两个有 交集 的区间必须在 同一个 组内。
如果两个区间有至少 一个 公共整数,那么这两个区间是 有交集 的。
- 比方说,区间
[1, 3]和[2, 5]有交集,因为2和3在两个区间中都被包含。请你返回将
ranges划分成两个组的 总方案数 。由于答案可能很大,将它对10^9 + 7取余 后返回。
2024年3月28日
【leetcode】1997. 访问完所有房间的第一天
题意:
你需要访问
n个房间,房间从0到n - 1编号。同时,每一天都有一个日期编号,从0开始,依天数递增。你每天都会访问一个房间。最开始的第
0天,你访问0号房间。给你一个长度为n且 下标从 0 开始 的数组nextVisit。在接下来的几天中,你访问房间的 次序 将根据下面的 规则 决定:
- 假设某一天,你访问
i号房间。- 如果算上本次访问,访问
i号房间的次数为 奇数 ,那么 第二天 需要访问nextVisit[i]所指定的房间,其中0 <= nextVisit[i] <= i。- 如果算上本次访问,访问
i号房间的次数为 偶数 ,那么 第二天 需要访问(i + 1) mod n号房间。请返回你访问完所有房间的第一天的日期编号。题目数据保证总是存在这样的一天。由于答案可能很大,返回对
10^9 + 7取余后的结果。
2024年3月29日
【leetcode】2908. 元素和最小的山形三元组 I
题意:
给你一个下标从 0 开始的整数数组
nums。如果下标三元组
(i, j, k)满足下述全部条件,则认为它是一个 山形三元组 :
i < j < knums[i] < nums[j]且nums[k] < nums[j]请你找出
nums中 元素和最小 的山形三元组,并返回其 元素和 。如果不存在满足条件的三元组,返回-1。
2024年3月30日
【leetcode】2952. 需要添加的硬币的最小数量
题意:
给你一个下标从 0 开始的整数数组
coins,表示可用的硬币的面值,以及一个整数target。如果存在某个
coins的子序列总和为x,那么整数x就是一个 可取得的金额 。返回需要添加到数组中的 任意面值 硬币的 最小数量 ,使范围
[1, target]内的每个整数都属于 可取得的金额 。数组的 子序列 是通过删除原始数组的一些(可能不删除)元素而形成的新的 非空 数组,删除过程不会改变剩余元素的相对位置。
2024年3月31日
【leetcode】331. 验证二叉树的前序序列化
题意:
序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如
#。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。
保证 每个以逗号分隔的字符或为一个整数或为一个表示
null指针的'#'。你可以认为输入格式总是有效的
- 例如它永远不会包含两个连续的逗号,比如
"1,,3"。注意:不允许重建树。

浙公网安备 33010602011771号