2024年7月刷题记录
2024年7月1日
【leetcode】494. 目标和
题意:
给你一个非负整数数组
nums
和一个整数target
。向数组中的每个整数前添加
'+'
或'-'
,然后串联起所有整数,可以构造一个 表达式 :
- 例如,
nums = [2, 1]
,可以在2
之前添加'+'
,在1
之前添加'-'
,然后串联起来得到表达式"+2-1"
。返回可以通过上述方法构造的、运算结果等于
target
的不同 表达式 的数目。
2024年7月2日
【leetcode】392. 判断子序列
题意:
给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,
"ace"
是"abcde"
的一个子序列,而"aec"
不是)。进阶:
如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?
2024年7月3日
【leetcode】3115. 质数的最大距离
题意:
给你一个整数数组
nums
。返回两个(不一定不同的)质数在
nums
中 下标 的 最大距离。
2024年7月4日
【leetcode】3099. 哈沙德数
题意:
如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数
x
。如果x
是 哈沙德数 ,则返回x
各个数位上的数字之和,否则,返回-1
。
2024年7月5日
【leetcode】3033. 修改矩阵
题意:
给你一个下标从 0 开始、大小为
m x n
的整数矩阵matrix
,新建一个下标从 0 开始、名为answer
的矩阵。使answer
与matrix
相等,接着将其中每个值为-1
的元素替换为所在列的 最大 元素。返回矩阵
answer
。
2024年7月6日
【leetcode】3101. 交替子数组计数
题意:
给你一个二进制数组
nums
。如果一个子数组中 不存在 两个 相邻 元素的值 相同 的情况,我们称这样的子数组为 交替子数组 。
返回数组
nums
中交替子数组的数量。
2024年7月7日
【leetcode】1958. 检查操作是否合法
题意:
给你一个下标从 0 开始的
8 x 8
网格board
,其中board[r][c]
表示游戏棋盘上的格子(r, c)
。棋盘上空格用'.'
表示,白色格子用'W'
表示,黑色格子用'B'
表示。游戏中每次操作步骤为:选择一个空格子,将它变成你正在执行的颜色(要么白色,要么黑色)。但是,合法 操作必须满足:涂色后这个格子是 好线段的一个端点 (好线段可以是水平的,竖直的或者是对角线)。
好线段 指的是一个包含 三个或者更多格子(包含端点格子)的线段,线段两个端点格子为 同一种颜色 ,且中间剩余格子的颜色都为 另一种颜色 (线段上不能有任何空格子)。
给你两个整数
rMove
和cMove
以及一个字符color
,表示你正在执行操作的颜色(白或者黑),如果将格子(rMove, cMove)
变成颜色color
后,是一个 合法 操作,那么返回true
,如果不是合法操作返回false
。
2024年7月8日
【leetcode】724. 寻找数组的中心下标
题意:
给你一个整数数组
nums
,请计算数组的 中心下标 。数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果中心下标位于数组最左端,那么左侧数之和视为
0
,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回
-1
。
2024年7月9日
【leetcode】205. 同构字符串
题意:
给定两个字符串
s
和t
,判断它们是否是同构的。如果
s
中的字符可以按某种映射关系替换得到t
,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
2024年7月10日
【leetcode】290. 单词规律
题意:
给定一种规律
pattern
和一个字符串s
,判断s
是否遵循相同的规律。这里的 遵循 指完全匹配,例如,
pattern
里的每个字母和字符串s
中的每个非空单词之间存在着双向连接的对应规律。
2024年7月11日
【leetcode】242. 有效的字母异位词
题意:
给定两个字符串
s
和t
,编写一个函数来判断t
是否是s
的字母异位词。注意:若
s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。
2024年7月12日
【leetcode】2974. 最小数字游戏
题意:
你有一个下标从 0 开始、长度为 偶数 的整数数组
nums
,同时还有一个空数组arr
。Alice 和 Bob 决定玩一个游戏,游戏中每一轮 Alice 和 Bob 都会各自执行一次操作。游戏规则如下:
- 每一轮,Alice 先从
nums
中移除一个 最小 元素,然后 Bob 执行同样的操作。- 接着,Bob 会将移除的元素添加到数组
arr
中,然后 Alice 也执行同样的操作。- 游戏持续进行,直到
nums
变为空。返回结果数组
arr
。
2024年7月13日
【leetcode】3011. 判断一个数组是否可以变为有序
题意:
给你一个下标从 0 开始且全是 正 整数的数组
nums
。一次 操作 中,如果两个 相邻 元素在二进制下数位为 1 的数目 相同 ,那么你可以将这两个元素交换。你可以执行这个操作 任意次 (也可以 0 次)。
如果你可以使数组变有序,请你返回
true
,否则返回false
。
2024年7月14日
【leetcode】807. 保持城市天际线
题意:
给你一座由
n x n
个街区组成的城市,每个街区都包含一座立方体建筑。给你一个下标从 0 开始的n x n
整数矩阵grid
,其中grid[r][c]
表示坐落于r
行c
列的建筑物的 高度 。城市的 天际线 是从远处观察城市时,所有建筑物形成的外部轮廓。从东、南、西、北四个主要方向观测到的 天际线 可能不同。
我们被允许为 任意数量的建筑物 的高度增加 任意增量(不同建筑物的增量可能不同) 。 高度为
0
的建筑物的高度也可以增加。然而,增加的建筑物高度 不能影响 从任何主要方向观察城市得到的 天际线 。在 不改变 从任何主要方向观测到的城市 天际线 的前提下,返回建筑物可以增加的 最大高度增量总和 。
2024年7月15日
【leetcode】721. 账户合并
题意:
给定一个列表
accounts
,每个元素accounts[i]
是一个字符串列表,其中第一个元素accounts[i][0]
是 名称 (name),其余元素是 emails 表示该账户的邮箱地址。现在,我们想合并这些账户。如果两个账户都有一些共同的邮箱地址,则两个账户必定属于同一个人。请注意,即使两个账户具有相同的名称,它们也可能属于不同的人,因为人们可能具有相同的名称。一个人最初可以拥有任意数量的账户,但其所有账户都具有相同的名称。
合并账户后,按以下格式返回账户:每个账户的第一个元素是名称,其余元素是 按字符 ASCII 顺序排列 的邮箱地址。账户本身可以以 任意顺序 返回。
2024年7月16日
【leetcode】2956. 找到两个数组中的公共元素
题意:
给你两个下标从 0 开始的整数数组
nums1
和nums2
,它们分别含有n
和m
个元素。请你计算以下两个数值:
answer1
:使得nums1[i]
在nums2
中出现的下标i
的数量。answer2
:使得nums2[i]
在nums1
中出现的下标i
的数量。返回
[answer1, answer2]
。
2024年7月17日
【leetcode】49. 字母异位词分组
题意:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
2024年7月18日
【leetcode】3112. 访问消失节点的最少时间
题意:
给你一个二维数组
edges
表示一个n
个点的无向图,其中edges[i] = [ui, vi, lengthi]
表示节点ui
和节点vi
之间有一条需要lengthi
单位时间通过的无向边。同时给你一个数组
disappear
,其中disappear[i]
表示节点i
从图中消失的时间点,在那一刻及以后,你无法再访问这个节点。注意,图有可能一开始是不连通的,两个节点之间也可能有多条边。
请你返回数组
answer
,answer[i]
表示从节点0
到节点i
需要的 最少 单位时间。如果从节点0
出发 无法 到达节点i
,那么answer[i]
为-1
。
2024年7月19日
【leetcode】3096. 得到更多分数的最少关卡数目
题意:
给你一个长度为
n
的二进制数组possible
。Alice 和 Bob 正在玩一个有
n
个关卡的游戏,游戏中有一些关卡是 困难 模式,其他的关卡是 简单 模式。如果possible[i] == 0
,那么第i
个关卡是 困难 模式。一个玩家通过一个简单模式的关卡可以获得1
分,通过困难模式的关卡将失去1
分。游戏的一开始,Alice 将从第
0
级开始 按顺序 完成一些关卡,然后 Bob 会完成剩下的所有关卡。假设两名玩家都采取最优策略,目的是 最大化 自己的得分,Alice 想知道自己 最少 需要完成多少个关卡,才能获得比 Bob 更多的分数。
请你返回 Alice 获得比 Bob 更多的分数所需要完成的 最少 关卡数目,如果 无法 达成,那么返回
-1
。注意,每个玩家都至少需要完成
1
个关卡。
2024年7月20日
【leetcode】2850. 将石头分散到网格图的最少移动次数
题意:
给你一个大小为
3 * 3
,下标从 0 开始的二维整数矩阵grid
,分别表示每一个格子里石头的数目。网格图中总共恰好有9
个石头,一个格子里可能会有 多个 石头。每一次操作中,你可以将一个石头从它当前所在格子移动到一个至少有一条公共边的相邻格子。
请你返回每个格子恰好有一个石头的 最少移动次数 。
2024年7月21日
【leetcode】1186. 删除一次得到子数组最大和
题意:
给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。
注意,删除一个元素后,子数组 不能为空。
2024年7月22日
【leetcode】2101. 引爆最多的炸弹
题意:
给你一个炸弹列表。一个炸弹的 爆炸范围 定义为以炸弹为圆心的一个圆。
炸弹用一个下标从 0 开始的二维整数数组
bombs
表示,其中bombs[i] = [xi, yi, ri]
。xi
和yi
表示第i
个炸弹的 X 和 Y 坐标,ri
表示爆炸范围的 半径 。你需要选择引爆 一个 炸弹。当这个炸弹被引爆时,所有 在它爆炸范围内的炸弹都会被引爆,这些炸弹会进一步将它们爆炸范围内的其他炸弹引爆。
给你数组
bombs
,请你返回在引爆 一个 炸弹的前提下,最多 能引爆的炸弹数目。
2024年7月23日
【leetcode】122. 买卖股票的最佳时机 II
题意:
给你一个整数数组
prices
,其中prices[i]
表示某支股票第i
天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
【leetcode】123. 买卖股票的最佳时机 III
题意:
给定一个数组,它的第
i
个元素是一支给定的股票在第i
天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
【leetcode】188. 买卖股票的最佳时机 IV
题意:
给你一个整数数组
prices
和一个整数k
,其中prices[i]
是某支给定的股票在第i
天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成
k
笔交易。也就是说,你最多可以买k
次,卖k
次。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
2024年7月24日
【leetcode】2766. 重新放置石块
题意:
给你一个下标从 0 开始的整数数组
nums
,表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组moveFrom
和moveTo
。在
moveFrom.length
次操作内,你可以改变石块的位置。在第i
次操作中,你将位置在moveFrom[i]
的所有石块移到位置moveTo[i]
。完成这些操作后,请你按升序返回所有 有 石块的位置。
注意:
- 如果一个位置至少有一个石块,我们称这个位置 有 石块。
- 一个位置可能会有多个石块。
2024年7月25日
【leetcode】2844. 生成特殊数字的最少操作
题意:
给你一个下标从 0 开始的字符串
num
,表示一个非负整数。在一次操作中,您可以选择
num
的任意一位数字并将其删除。请注意,如果你删除num
中的所有数字,则num
变为0
。返回最少需要多少次操作可以使
num
变成特殊数字。如果整数
x
能被25
整除,则该整数x
被认为是特殊数字。
2024年7月26日
【leetcode】2740. 找出分区值
题意:
给你一个 正 整数数组
nums
。将
nums
分成两个数组:nums1
和nums2
,并满足下述条件:
- 数组
nums
中的每个元素都属于数组nums1
或数组nums2
。- 两个数组都 非空 。
- 分区值 最小 。
分区值的计算方法是
|max(nums1) - min(nums2)|
。其中,
max(nums1)
表示数组nums1
中的最大元素,min(nums2)
表示数组nums2
中的最小元素。返回表示分区值的整数。
2024年7月27日
【leetcode】3106. 满足距离约束且字典序最小的字符串
题意:
给你一个字符串
s
和一个整数k
。定义函数
distance(s1, s2)
,用于衡量两个长度为n
的字符串s1
和s2
之间的距离,即:
- 字符
'a'
到'z'
按 循环 顺序排列,对于区间[0, n - 1]
中的i
,计算所有「s1[i]
和s2[i]
之间 最小距离」的 和 。例如,
distance("ab", "cd") == 4
,且distance("a", "z") == 1
。你可以对字符串
s
执行 任意次 操作。在每次操作中,可以将s
中的一个字母 改变 为 任意 其他小写英文字母。返回一个字符串,表示在执行一些操作后你可以得到的 字典序最小 的字符串
t
,且满足distance(s, t) <= k
。
2024年7月28日
【leetcode】202. 快乐数
题意:
编写一个算法来判断一个数
n
是不是快乐数。「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
如果
n
是 快乐数 就返回true
;不是,则返回false
。
2024年7月29日
【leetcode】682. 棒球比赛
题意:
你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表
ops
,其中ops[i]
是你需要记录的第i
项操作,ops
遵循下述规则:
- 整数
x
- 表示本回合新获得分数x
"+"
- 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。"D"
- 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。"C"
- 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。请你返回记录中所有得分的总和。
2024年7月30日
【leetcode】2961. 双模幂运算
题意:
给你一个下标从 0 开始的二维数组
variables
,其中variables[i] = [a_i, b_i, c_i, m_i]
,以及一个整数target
。如果满足以下公式,则下标
i
是 好下标:
0 <= i < variables.length
((a_i^(b_i) % 10)^(c_i)) % m_i == target
返回一个由 好下标 组成的数组,顺序不限 。
2024年7月31日
【leetcode】3111. 覆盖所有点的最少矩形数目
题意:
给你一个二维整数数组
point
,其中points[i] = [xi, yi]
表示二维平面内的一个点。同时给你一个整数w
。你需要用矩形 覆盖所有 点。每个矩形的左下角在某个点
(x1, 0)
处,且右上角在某个点(x2, y2)
处,其中x1 <= x2
且y2 >= 0
,同时对于每个矩形都 必须 满足x2 - x1 <= w
。如果一个点在矩形内或者在边上,我们说这个点被矩形覆盖了。
请你在确保每个点都 至少 被一个矩形覆盖的前提下,最少 需要多少个矩形。
注意:一个点可以被多个矩形覆盖。