2024年1月刷题记录
2024年1月1日
【leetcode】1599. 经营摩天轮的最大利润
题意:
你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱,但每次轮转都需要支付一定的运行成本
runningCost
。摩天轮每次轮转都恰好转动 1 / 4 周。给你一个长度为
n
的数组customers
,customers[i]
是在第i
次轮转(下标从 0 开始)之前到达的新游客的数量。这也意味着你必须在新游客到来前轮转i
次。每位游客在登上离地面最近的座舱前都会支付登舱成本boardingCost
,一旦该座舱再次抵达地面,他们就会离开座舱结束游玩。你可以随时停下摩天轮,即便是 在服务所有游客之前 。如果你决定停止运营摩天轮,为了保证所有游客安全着陆,将免费进行所有后续轮转。注意,如果有超过 4 位游客在等摩天轮,那么只有 4 位游客可以登上摩天轮,其余的需要等待 下一次轮转 。
返回最大化利润所需执行的 最小轮转次数 。 如果不存在利润为正的方案,则返回
-1
。
2024年1月2日
【leetcode】466. 统计重复个数
题意:
定义
str = [s, n]
表示str
由n
个字符串s
连接构成。
- 例如,
str == ["abc", 3] =="abcabcabc"
。如果可以从
s2
中删除某些字符使其变为s1
,则称字符串s1
可以从字符串s2
获得。
- 例如,根据定义,
s1 = "abc"
可以从s2 = "ab*dbe*c"
获得,仅需要删除加粗且用斜体标识的字符。现在给你两个字符串
s1
和s2
和两个整数n1
和n2
。由此构造得到两个字符串,其中str1 = [s1, n1]
、str2 = [s2, n2]
。请你找出一个最大整数
m
,以满足str = [str2, m]
可以从str1
获得。
2024年1月3日
【leetcode】2487. 从链表中移除节点
题意:
给你一个链表的头节点
head
。移除每个右侧有一个更大数值的节点。
返回修改后链表的头节点
head
。
2024年1月4日
【leetcode】2397. 被列覆盖的最多行数
题意:
给你一个下标从 0 开始、大小为
m x n
的二进制矩阵matrix
;另给你一个整数numSelect
,表示你必须从matrix
中选择的 不同 列的数量。如果一行中所有的
1
都被你选中的列所覆盖,则认为这一行被 覆盖 了。形式上,假设
s = {c1, c2, ...., cnumSelect}
是你选择的列的集合。对于矩阵中的某一行row
,如果满足下述条件,则认为这一行被集合s
覆盖:
- 对于满足
matrix[row][col] == 1
的每个单元格matrix[row][col]
(0 <= col <= n - 1
),col
均存在于s
中,或者row
中 不存在 值为1
的单元格。你需要从矩阵中选出
numSelect
个列,使集合覆盖的行数最大化。返回一个整数,表示可以由
numSelect
列构成的集合 覆盖 的 最大行数 。
2024年1月5日
【leetcode】1944. 队列中可以看到的人数
题意:
有
n
个人排成一个队列,从左到右 编号为0
到n - 1
。给你以一个整数数组heights
,每个整数 互不相同,heights[i]
表示第i
个人的高度。一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮 。更正式的,第
i
个人能看到第j
个人的条件是i < j
且min(heights[i], heights[j]) > max(heights[i+1], heights[i+2], ..., heights[j-1])
。请你返回一个长度为
n
的数组answer
,其中answer[i]
是第i
个人在他右侧队列中能 看到 的 人数 。
2024年1月6日
【leetcode】2807. 在链表中插入最大公约数
题意:
给你一个链表的头
head
,每个结点包含一个整数值。在相邻结点之间,请你插入一个新的结点,结点值为这两个相邻结点值的 最大公约数 。
请你返回插入之后的链表。
两个数的 最大公约数 是可以被两个数字整除的最大正整数。
2024年1月7日
【leetcode】383. 赎金信
题意:
给你两个字符串:
ransomNote
和magazine
,判断ransomNote
能不能由magazine
里面的字符构成。如果可以,返回
true
;否则返回false
。
magazine
中的每个字符只能在ransomNote
中使用一次。
2024年1月8日
【leetcode】447. 回旋镖的数量
题意:
给定平面上
n
对 互不相同 的点points
,其中points[i] = [xi, yi]
。回旋镖 是由点(i, j, k)
表示的元组 ,其中i
和j
之间的距离和i
和k
之间的欧式距离相等(需要考虑元组的顺序)。返回平面上所有回旋镖的数量。
2024年1月9日
【leetcode】2707. 字符串中的额外字符
题意:
给你一个下标从 0 开始的字符串
s
和一个单词字典dictionary
。你需要将s
分割成若干个 互不重叠 的子字符串,每个子字符串都在dictionary
中出现过。s
中可能会有一些 额外的字符 不在任何子字符串中。请你采取最优策略分割
s
,使剩下的字符 最少 。
2024年1月10日
【leetcode】2696. 删除子串后的字符串最小长度
题意:
给你一个仅由 大写 英文字符组成的字符串
s
。你可以对此字符串执行一些操作,在每一步操作中,你可以从
s
中删除 任一个"AB"
或"CD"
子字符串。通过执行操作,删除所有
"AB"
和"CD"
子串,返回可获得的最终字符串的 最小 可能长度。注意,删除子串后,重新连接出的字符串可能会产生新的
"AB"
或"CD"
子串。
2024年1月11日
【leetcode】2645. 构造有效字符串的最少插入数
题意:
给你一个字符串
word
,你可以向其中任何位置插入 "a"、"b" 或 "c" 任意次,返回使word
有效 需要插入的最少字母数。如果字符串可以由 "abc" 串联多次得到,则认为该字符串 有效 。
2024年1月12日
【leetcode】2085. 统计出现过一次的公共字符串
题意:
给你两个字符串数组
words1
和words2
,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。
2024年1月13日
【leetcode】2182. 构造限制重复的字符串
题意:
给你一个字符串
s
和一个整数repeatLimit
,用s
中的字符构造一个新字符串repeatLimitedString
,使任何字母 连续 出现的次数都不超过repeatLimit
次。你不必使用s
中的全部字符。返回 字典序最大的
repeatLimitedString
。如果在字符串
a
和b
不同的第一个位置,字符串a
中的字母在字母表中出现时间比字符串b
对应的字母晚,则认为字符串a
比字符串b
字典序更大 。如果字符串中前min(a.length, b.length)
个字符都相同,那么较长的字符串字典序更大。
2024年1月14日
【leetcode】83. 删除排序链表中的重复元素
题意:
给定一个已排序的链表的头
head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
2024年1月15日
【leetcode】82. 删除排序链表中的重复元素 II
题意:
给定一个已排序的链表的头
head
, 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
【leetcode】203. 移除链表元素
题意:
给你一个链表的头节点
head
和一个整数val
,请你删除链表中所有满足Node.val == val
的节点,并返回 新的头节点 。
2024年1月16日
【leetcode】2719. 统计整数数目
题意:
给你两个数字字符串
num1
和num2
,以及两个整数max_sum
和min_sum
。如果一个整数x
满足以下条件,我们称它是一个好整数:
num1 <= x <= num2
min_sum <= digit_sum(x) <= max_sum
.请你返回好整数的数目。答案可能很大,请返回答案对
109 + 7
取余后的结果。注意,
digit_sum(x)
表示x
各位数字之和。
【leetcode】2376. 统计特殊整数
题意:
给你两个数字字符串
num1
和num2
,以及两个整数max_sum
和min_sum
。如果一个整数x
满足以下条件,我们称它是一个好整数:
num1 <= x <= num2
min_sum <= digit_sum(x) <= max_sum
.请你返回好整数的数目。答案可能很大,请返回答案对
109 + 7
取余后的结果。注意,
digit_sum(x)
表示x
各位数字之和。
【leetcode】1012. 至少有 1 位重复的数字
题意:
给定正整数
n
,返回在[1, n]
范围内具有 至少 1 位 重复数字的正整数的个数。
【leetcode】902. 最大为 N 的数字组合
题意:
给你两个数字字符串
num1
和num2
,以及两个整数max_sum
和min_sum
。如果一个整数x
满足以下条件,我们称它是一个好整数:
num1 <= x <= num2
min_sum <= digit_sum(x) <= max_sum
.请你返回好整数的数目。答案可能很大,请返回答案对
109 + 7
取余后的结果。注意,
digit_sum(x)
表示x
各位数字之和。
【leetcode】2999. 统计强大整数的数目
题意:
给你三个整数
start
,finish
和limit
。同时给你一个下标从 0 开始的字符串s
,表示一个 正 整数。如果一个 正 整数
x
末尾部分是s
(换句话说,s
是x
的 后缀),且x
中的每个数位至多是limit
,那么我们称x
是 强大的 。请你返回区间
[start..finish]
内强大整数的 总数目 。如果一个字符串
x
是y
中某个下标开始(包括0
),到下标为y.length - 1
结束的子字符串,那么我们称x
是y
的一个后缀。比方说,25
是5125
的一个后缀,但不是512
的后缀。
2024年1月17日
【leetcode】2744. 最大字符串配对数目
题意:
给你一个下标从 0 开始的数组
words
,数组中包含 互不相同 的字符串。如果字符串
words[i]
与字符串words[j]
满足以下条件,我们称它们可以匹配:
- 字符串
words[i]
等于words[j]
的反转字符串。0 <= i < j < words.length
请你返回数组
words
中的 最大 匹配数目。注意,每个字符串最多匹配一次。
2024年1月18日
【leetcode】233. 数字 1 的个数
题意:
给定一个整数
n
,计算所有小于等于n
的非负整数中数字1
出现的个数。
【leetcode】2171. 拿出最少数目的魔法豆
题意:
给定一个 正整数 数组
beans
,其中每个整数表示一个袋子里装的魔法豆的数目。请你从每个袋子中 拿出 一些豆子(也可以 不拿出),使得剩下的 非空 袋子中(即 至少还有一颗 魔法豆的袋子)魔法豆的数目 相等。一旦把魔法豆从袋子中取出,你不能再将它放到任何袋子中。
请返回你需要拿出魔法豆的 最少数目。
2024年1月19日
【leetcode】600. 不含连续1的非负整数
题意:
给定一个正整数
n
,请你统计在[0, n]
范围的非负整数中,有多少个整数的二进制表示中不存在 连续的 1 。
2024年1月22日
【leetcode】670. 最大交换
题意:
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
2024年1月23日
【leetcode】2765. 最长交替子数组
题意:
给你一个下标从 0 开始的整数数组
nums
。如果nums
中长度为m
的子数组s
满足以下条件,我们称它是一个 交替子数组 :
m
大于1
。s1 = s0 + 1
。- 下标从 0 开始的子数组
s
与数组[s0, s1, s0, s1,...,s(m-1)%2]
一样。也就是说,s1 - s0 = 1
,s2 - s1 = -1
,s3 - s2 = 1
,s4 - s3 = -1
,以此类推,直到s[m - 1] - s[m - 2] = (-1)^m
。请你返回
nums
中所有 交替 子数组中,最长的长度,如果不存在交替子数组,请你返回-1
。子数组是一个数组中一段连续 非空 的元素序列。
2024年1月24日
【leetcode】2865. 美丽塔 I
题意:
给你一个长度为
n
下标从 0 开始的整数数组maxHeights
。你的任务是在坐标轴上建
n
座塔。第i
座塔的下标为i
,高度为heights[i]
。如果以下条件满足,我们称这些塔是 美丽 的:
1 <= heights[i] <= maxHeights[i]
heights
是一个 山脉 数组。如果存在下标
i
满足以下条件,那么我们称数组heights
是一个 山脉 数组:
- 对于所有
0 < j <= i
,都有heights[j - 1] <= heights[j]
- 对于所有
i <= k < n - 1
,都有heights[k + 1] <= heights[k]
请你返回满足 美丽塔 要求的方案中,高度和的最大值 。
2024年1月25日
【leetcode】2859. 计算 K 置位下标对应元素的和
题意:
给你一个下标从 0 开始的整数数组
nums
和一个整数k
。请你用整数形式返回
nums
中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在k
个置位。整数的二进制表示中的 1 就是这个整数的 置位 。
例如,
21
的二进制表示为10101
,其中有3
个置位。
2024年1月26日
【leetcode】19. 删除链表的倒数第 N 个结点
题意:
给你一个链表,删除链表的倒数第
n
个结点,并且返回链表的头结点。
2024年1月27日
【leetcode】2861. 最大合金数
题意:
假设你是一家合金制造公司的老板,你的公司使用多种金属来制造合金。现在共有
n
种不同类型的金属可以使用,并且你可以使用k
台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。对于第
i
台机器而言,创建合金需要composition[i][j]
份j
类型金属。最初,你拥有stock[i]
份i
类型金属,而每购入一份i
类型金属需要花费cost[i]
的金钱。给你整数
n
、k
、budget
,下标从 1 开始的二维数组composition
,两个下标从 1 开始的数组stock
和cost
,请你在预算不超过budget
金钱的前提下,最大化 公司制造合金的数量。所有合金都需要由同一台机器制造。
返回公司可以制造的最大合金数。
2024年1月28日
【leetcode】365. 水壶问题
题意:
有两个水壶,容量分别为
jug1Capacity
和jug2Capacity
升。水的供应是无限的。确定是否有可能使用这两个壶准确得到targetCapacity
升。如果可以得到
targetCapacity
升水,最后请用以上水壶中的一或两个来盛放取得的targetCapacity
升水。你可以:
- 装满任意一个水壶
- 清空任意一个水壶
- 从一个水壶向另外一个水壶倒水,直到装满或者倒空
2024年1月30日
【leetcode】2808. 使循环数组所有元素相等的最少秒数
题意:
给你一个下标从 0 开始长度为
n
的数组nums
。每一秒,你可以对数组执行以下操作:
- 对于范围在
[0, n - 1]
内的每一个下标i
,将nums[i]
替换成nums[i]
,nums[(i - 1 + n) % n]
或者nums[(i + 1) % n]
三者之一。注意,所有元素会被同时替换。
请你返回将数组
nums
中所有元素变成相等元素所需要的 最少 秒数。
2024年1月31日
【leetcode】2670. 找出不同元素数目差数组
题意:
给你一个下标从 0 开始的数组
nums
,数组长度为n
。
nums
的 不同元素数目差 数组可以用一个长度为n
的数组diff
表示,其中diff[i]
等于前缀nums[0, ..., i]
中不同元素的数目 减去 后缀nums[i + 1, ..., n - 1]
中不同元素的数目。返回
nums
的 不同元素数目差 数组。注意
nums[i, ..., j]
表示nums
的一个从下标i
开始到下标j
结束的子数组(包含下标i
和j
对应元素)。特别需要说明的是,如果i > j
,则nums[i, ..., j]
表示一个空子数组。