2023年3月刷题记录
2023年3月1日
leetcode2373. 矩阵中的局部最大值
链接地址:https://leetcode.cn/problems/largest-local-values-in-a-matrix/
题意:
给你一个大小为
n x n
的整数矩阵grid
。生成一个大小为
(n - 2) x (n - 2)
的整数矩阵maxLocal
,并满足:
maxLocal[i][j]
等于grid
中以i + 1
行和j + 1
列为中心的3 x 3
矩阵中的 最大值 。换句话说,我们希望找出
grid
中每个3 x 3
矩阵中的最大值。返回生成的矩阵。
2023年3月2日
leetcode面试题 05.02. 二进制数转字符串
链接地址:https://leetcode.cn/problems/bianry-number-to-string-lcci/
题意:
二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。
2023年3月3日
leetcode1487. 保证文件名唯一
链接地址:https://leetcode.cn/problems/making-file-names-unique/
题意:
给你一个长度为
n
的字符串数组names
。你将会在文件系统中创建n
个文件夹:在第i
分钟,新建名为names[i]
的文件夹。由于两个文件 不能 共享相同的文件名,因此如果新建文件夹使用的文件名已经被占用,系统会以
(k)
的形式为新文件夹的文件名添加后缀,其中k
是能保证文件名唯一的 最小正整数 。返回长度为
n
的字符串数组,其中ans[i]
是创建第i
个文件夹时系统分配给该文件夹的实际名称。
2023年3月4日
leetcode1844. 将所有数字用字符替换
链接地址:https://leetcode.cn/problems/replace-all-digits-with-characters/
题意:
给你一个下标从 0 开始的字符串
s
,它的 偶数 下标处为小写英文字母,奇数 下标处为数字。定义一个函数
shift(c, x)
,其中c
是一个字符且x
是一个数字,函数返回字母表中c
后面第x
个字符。
- 比方说,
shift('a', 5) = 'f'
和shift('x', 0) = 'x'
。对于每个 奇数 下标
i
,你需要将数字s[i]
用shift(s[i-1], s[i])
替换。请你替换所有数字以后,将字符串
s
返回。题目 保证shift(s[i-1], s[i])
不会超过'z'
。
2023年3月5日
leetcode1599. 经营摩天轮的最大利润
链接地址:https://leetcode.cn/problems/maximum-profit-of-operating-a-centennial-wheel/
题意:
你正在经营一座摩天轮,该摩天轮共有 4 个座舱 ,每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱,但每次轮转都需要支付一定的运行成本
runningCost
。摩天轮每次轮转都恰好转动 1 / 4 周。给你一个长度为
n
的数组customers
,customers[i]
是在第i
次轮转(下标从 0 开始)之前到达的新游客的数量。这也意味着你必须在新游客到来前轮转i
次。每位游客在登上离地面最近的座舱前都会支付登舱成本boardingCost
,一旦该座舱再次抵达地面,他们就会离开座舱结束游玩。你可以随时停下摩天轮,即便是 在服务所有游客之前 。如果你决定停止运营摩天轮,为了保证所有游客安全着陆,将免费进行****所有后续轮转 。注意,如果有超过 4 位游客在等摩天轮,那么只有 4 位游客可以登上摩天轮,其余的需要等待 下一次轮转 。
返回最大化利润所需执行的 最小轮转次数 。 如果不存在利润为正的方案,则返回
-1
。
2023年3月6日
leetcode1653. 使字符串平衡的最少删除次数
链接地址:https://leetcode.cn/problems/minimum-deletions-to-make-string-balanced/
题意:
给你一个字符串
s
,它仅包含字符'a'
和'b'
。你可以删除
s
中任意数目的字符,使得s
平衡 。当不存在下标对(i,j)
满足i < j
,且s[i] = 'b'
的同时s[j]= 'a'
,此时认为s
是 平衡 的。请你返回使
s
平衡 的 最少 删除次数。
2023年3月7日
leetcode268. 丢失的数字
链接地址:https://leetcode.cn/problems/missing-number/
题意:
给定一个包含
[0, n]
中n
个数的数组nums
,找出[0, n]
这个范围内没有出现在数组中的那个数。
2023年3月8日
leetcode剑指 Offer 47. 礼物的最大价值
链接地址:https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/
题意:
在一个 m*n 的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物?
2023年3月9日
leetcode2379. 得到 K 个黑块的最少涂色次数
链接地址:https://leetcode.cn/problems/minimum-recolors-to-get-k-consecutive-black-blocks/
题意:
给你一个长度为
n
下标从 0 开始的字符串blocks
,blocks[i]
要么是'W'
要么是'B'
,表示第i
块的颜色。字符'W'
和'B'
分别表示白色和黑色。给你一个整数
k
,表示想要 连续 黑色块的数目。每一次操作中,你可以选择一个白色块将它 涂成 黑色块。
请你返回至少出现 一次 连续
k
个黑色块的 最少 操作次数。
2023年3月10日
leetcode1590. 使数组和能被 P 整除
链接地址:https://leetcode.cn/problems/make-sum-divisible-by-p/
题意:
给你一个正整数数组
nums
,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被p
整除。 不允许 将整个数组都移除。请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回
-1
。子数组 定义为原数组中连续的一组元素。
2023年3月11日
leetcode面试题 17.05. 字母与数字
链接地址:https://leetcode.cn/problems/find-longest-subarray-lcci/
题意:
给定一个放有字母和数字的数组,找到最长的子数组,且包含的字母和数字的个数相同。
返回该子数组,若存在多个最长子数组,返回左端点下标值最小的子数组。若不存在这样的数组,返回一个空数组。
2023年3月12日
leetcode2086. 从房屋收集雨水需要的最少水桶数
链接地址:https://leetcode.cn/problems/minimum-number-of-food-buckets-to-feed-the-hamsters/
题意:
给你一个下标从 0 开始的字符串
street
。street
中每个字符要么是表示房屋的'H'
,要么是表示空位的'.'
。你可以在 空位 放置水桶,从相邻的房屋收集雨水。位置在
i - 1
或者i + 1
的水桶可以收集位置为i
处房屋的雨水。一个水桶如果相邻两个位置都有房屋,那么它可以收集 两个 房屋的雨水。在确保 每个 房屋旁边都 至少 有一个水桶的前提下,请你返回需要的 最少 水桶数。如果无解请返回
-1
。
2023年3月13日
leetcode2383. 赢得比赛需要的最少训练时长
链接地址:https://leetcode.cn/problems/minimum-hours-of-training-to-win-a-competition/
题意:
你正在参加一场比赛,给你两个 正 整数
initialEnergy
和initialExperience
分别表示你的初始精力和初始经验。另给你两个下标从 0 开始的整数数组
energy
和experience
,长度均为n
。你将会 依次 对上
n
个对手。第i
个对手的精力和经验分别用energy[i]
和experience[i]
表示。当你对上对手时,需要在经验和精力上都 严格 超过对手才能击败他们,然后在可能的情况下继续对上下一个对手。击败第
i
个对手会使你的经验 增加experience[i]
,但会将你的精力 减少energy[i]
。在开始比赛前,你可以训练几个小时。每训练一个小时,你可以选择将增加经验增加 1 或者 将精力增加 1 。
返回击败全部
n
个对手需要训练的 最少 小时数目。
2023年3月14日
leetcode1605. 给定行和列的和求可行矩阵
链接地址:https://leetcode.cn/problems/find-valid-matrix-given-row-and-column-sums/
题意:
给你两个非负整数数组
rowSum
和colSum
,其中rowSum[i]
是二维矩阵中第i
行元素的和,colSum[j]
是第j
列元素的和。换言之你不知道矩阵里的每个元素,但是你知道每一行和每一列的和。请找到大小为
rowSum.length x colSum.length
的任意 非负整数 矩阵,且该矩阵满足rowSum
和colSum
的要求。请你返回任意一个满足题目要求的二维矩阵,题目保证存在 至少一个 可行矩阵。
2023年3月15日
leetcode1615. 最大网络秩
链接地址:https://leetcode.cn/problems/maximal-network-rank/
题意:
n
座城市和一些连接这些城市的道路roads
共同组成一个基础设施网络。每个roads[i] = [ai, bi]
都表示在城市ai
和bi
之间有一条双向道路。两座不同城市构成的 城市对 的 网络秩 定义为:与这两座城市 直接 相连的道路总数。如果存在一条道路直接连接这两座城市,则这条道路只计算 一次 。
整个基础设施网络的 最大网络秩 是所有不同城市对中的 最大网络秩 。
给你整数
n
和数组roads
,返回整个基础设施网络的 最大网络秩 。
2023年3月16日
leetcode1545. 找出第 N 个二进制字符串中的第 K 位
链接地址:https://leetcode.cn/problems/find-kth-bit-in-nth-binary-string/
题意:
给你两个正整数
n
和k
,二进制字符串Sn
的形成规则如下:
S1 = "0"
- 当
i > 1
时,Si = Si-1 + "1" + reverse(invert(Si-1))
其中
+
表示串联操作,reverse(x)
返回反转x
后得到的字符串,而invert(x)
则会翻转 x 中的每一位(0 变为 1,而 1 变为 0)。例如,符合上述描述的序列的前 4 个字符串依次是:
S1 = "0"
S2 = "0**1**1"
S3 = "011**1**001"
S4 = "0111001**1**0110001"
请你返回
Sn
的 第k
位字符 ,题目数据保证k
一定在Sn
长度范围以内。
2023年3月17日
leetcode2389. 和有限的最长子序列
链接地址:https://leetcode.cn/problems/longest-subsequence-with-limited-sum/
题意:
给你一个长度为
n
的整数数组nums
,和一个长度为m
的整数数组queries
。返回一个长度为
m
的数组answer
,其中answer[i]
是nums
中 元素之和小于等于queries[i]
的 子序列 的 最大 长度 。子序列 是由一个数组删除某些元素(也可以不删除)但不改变剩余元素顺序得到的一个数组。
2023年3月18日
leetcode1616. 分割两个字符串得到回文串
链接地址:https://leetcode.cn/problems/split-two-strings-to-make-palindrome/
题意:
给你两个字符串
a
和b
,它们长度相同。请你选择一个下标,将两个字符串都在 相同的下标 分割开。由a
可以得到两个字符串:aprefix
和asuffix
,满足a = aprefix + asuffix
,同理,由b
可以得到两个字符串bprefix
和bsuffix
,满足b = bprefix + bsuffix
。请你判断aprefix + bsuffix
或者bprefix + asuffix
能否构成回文串。当你将一个字符串
s
分割成sprefix
和ssuffix
时,ssuffix
或者sprefix
可以为空。比方说,s = "abc"
那么"" + "abc"
,"a" + "bc"
,"ab" + "c"
和"abc" + ""
都是合法分割。如果 能构成回文字符串 ,那么请返回
true
,否则返回false
。注意,
x + y
表示连接字符串x
和y
。
2023年3月19日
leetcode1625. 执行操作后字典序最小的字符串
链接地址:https://leetcode.cn/problems/lexicographically-smallest-string-after-applying-operations/
题意:
给你一个字符串
s
以及两个整数a
和b
。其中,字符串s
的长度为偶数,且仅由数字0
到9
组成。你可以在
s
上按任意顺序多次执行下面两个操作之一:
- 累加:将
a
加到s
中所有下标为奇数的元素上(下标从 0 开始)。数字一旦超过9
就会变成0
,如此循环往复。例如,s = "3456"
且a = 5
,则执行此操作后s
变成"3951"
。- 轮转:将
s
向右轮转b
位。例如,s = "3456"
且b = 1
,则执行此操作后s
变成"6345"
。请你返回在
s
上执行上述操作任意次后可以得到的 字典序最小 的字符串。如果两个字符串长度相同,那么字符串
a
字典序比字符串b
小可以这样定义:在a
和b
出现不同的第一个位置上,字符串a
中的字符出现在字母表中的时间早于b
中的对应字符。例如,"0158”
字典序比"0190"
小,因为不同的第一个位置是在第三个字符,显然'5'
出现在'9'
之前。
2023年3月20日
leetcode223. 矩形面积
链接地址:https://leetcode.cn/problems/rectangle-area/
题意:
给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。
每个矩形由其 左下 顶点和 右上 顶点坐标表示:
- 第一个矩形由其左下顶点
(ax1, ay1)
和右上顶点(ax2, ay2)
定义。- 第二个矩形由其左下顶点
(bx1, by1)
和右上顶点(bx2, by2)
定义。
2023年3月21日
leetcode2469. 温度转换
链接地址:https://leetcode.cn/problems/convert-the-temperature/
题意:
给你一个四舍五入到两位小数的非负浮点数
celsius
来表示温度,以 摄氏度(Celsius)为单位。你需要将摄氏度转换为 开氏度(Kelvin)和 华氏度(Fahrenheit),并以数组
ans = [kelvin, fahrenheit]
的形式返回结果。返回数组
ans
。与实际答案误差不超过10-5
的会视为正确答案。注意:
开氏度 = 摄氏度 + 273.15
华氏度 = 摄氏度 * 1.80 + 32.00
leetcode962. 最大宽度坡
链接地址:https://leetcode.cn/problems/maximum-width-ramp/
题意:
给定一个整数数组
A
,坡是元组(i, j)
,其中i < j
且A[i] <= A[j]
。这样的坡的宽度为j - i
。找出
A
中的坡的最大宽度,如果不存在,返回 0 。
2023年3月22日
leetcode1626. 无矛盾的最佳球队
链接地址:https://leetcode.cn/problems/best-team-with-no-conflicts/
题意:
假设你是球队的经理。对于即将到来的锦标赛,你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。
然而,球队中的矛盾会限制球员的发挥,所以必须选出一支 没有矛盾 的球队。如果一名年龄较小球员的分数 严格大于 一名年龄较大的球员,则存在矛盾。同龄球员之间不会发生矛盾。
给你两个列表
scores
和ages
,其中每组scores[i]
和ages[i]
表示第i
名球员的分数和年龄。请你返回 所有可能的无矛盾球队中得分最高那支的分数 。
2023年3月23日
leetcode1630. 等差子数组
链接地址:https://leetcode.cn/problems/arithmetic-subarrays/
题意:
如果一个数列由至少两个元素组成,且每两个连续元素之间的差值都相同,那么这个序列就是 等差数列 。更正式地,数列
s
是等差数列,只需要满足:对于每个有效的i
,s[i+1] - s[i] == s[1] - s[0]
都成立。例如,下面这些都是 等差数列 :
1, 3, 5, 7, 9 7, 7, 7, 7 3, -1, -5, -9
下面的数列 不是等差数列 :
1, 1, 2, 5, 7
给你一个由
n
个整数组成的数组nums
,和两个由m
个整数组成的数组l
和r
,后两个数组表示m
组范围查询,其中第i
个查询对应范围[l[i], r[i]]
。所有数组的下标都是 从 0 开始 的。返回
boolean
元素构成的答案列表answer
。如果子数组nums[l[i]], nums[l[i]+1], ... , nums[r[i]]
可以 重新排列 形成 等差数列 ,answer[i]
的值就是true
;否则answer[i]
的值就是false
。
2023年3月24日
leetcode2396. 严格回文的数字
链接地址:https://leetcode.cn/problems/strictly-palindromic-number/
题意:
如果一个整数
n
在b
进制下(b
为2
到n - 2
之间的所有整数)对应的字符串 全部 都是 回文的 ,那么我们称这个数n
是 严格回文 的。给你一个整数
n
,如果n
是 严格回文 的,请返回true
,否则返回false
。如果一个字符串从前往后读和从后往前读完全相同,那么这个字符串是 回文的 。
2023年3月25日
leetcode1574. 删除最短的子数组使剩余数组有序
链接地址:https://leetcode.cn/problems/shortest-subarray-to-be-removed-to-make-array-sorted/
题意:
给你一个整数数组
arr
,请你删除一个子数组(可以为空),使得arr
中剩下的元素是 非递减 的。一个子数组指的是原数组中连续的一个子序列。
请你返回满足题目要求的最短子数组的长度。
2023年3月26日
leetcode2395. 和相等的子数组
链接地址:https://leetcode.cn/problems/find-subarrays-with-equal-sum/
题意:
给你一个下标从 0 开始的整数数组
nums
,判断是否存在 两个 长度为2
的子数组且它们的 和 相等。注意,这两个子数组起始位置的下标必须 不相同 。如果这样的子数组存在,请返回
true
,否则返回false
。子数组 是一个数组中一段连续非空的元素组成的序列。
2023年3月27日
leetcode1638. 统计只差一个字符的子串数目
链接地址:https://leetcode.cn/problems/count-substrings-that-differ-by-one-character/
题意:
给你两个字符串
s
和t
,请你找出s
中的非空子串的数目,这些子串满足替换 一个不同字符 以后,是t
串的子串。换言之,请你找到s
和t
串中 恰好 只有一个字符不同的子字符串对的数目。比方说,
"computer"
and"computation"
只有一个字符不同:'e'
/'a'
,所以这一对子字符串会给答案加 1 。请你返回满足上述条件的不同子字符串对数目。
一个 子字符串 是一个字符串中连续的字符。
2023年3月28日
leetcode2194. Excel 表中某个范围内的单元格
链接地址:https://leetcode.cn/problems/cells-in-a-range-on-an-excel-sheet/
题意:
Excel 表中的一个单元格
(r, c)
会以字符串"<col><row>"
的形式进行表示,其中:
<col>
即单元格的列号c
。用英文字母表中的 字母 标识。
- 例如,第
1
列用'A'
表示,第2
列用'B'
表示,第3
列用'C'
表示,以此类推。<row>
即单元格的行号r
。第r
行就用 整数r
标识。给你一个格式为
"<col1><row1>:<col2><row2>"
的字符串s
,其中<col1>
表示c1
列,<row1>
表示r1
行,<col2>
表示c2
列,<row2>
表示r2
行,并满足r1 <= r2
且c1 <= c2
。找出所有满足
r1 <= x <= r2
且c1 <= y <= c2
的单元格,并以列表形式返回。单元格应该按前面描述的格式用 字符串 表示,并以 非递减 顺序排列(先按列排,再按行排)。
2023年3月29日
leetcode1641. 统计字典序元音字符串的数目
链接地址:https://leetcode.cn/problems/count-sorted-vowel-strings/
题意:
给你一个整数
n
,请返回长度为n
、仅由元音 (a
,e
,i
,o
,u
) 组成且按 字典序排列 的字符串数量。字符串
s
按 字典序排列 需要满足:对于所有有效的i
,s[i]
在字母表中的位置总是与s[i+1]
相同或在s[i+1]
之前。
2023年3月30日
leetcode1637. 两点之间不包含任何点的最宽垂直区域
链接地址:https://leetcode.cn/problems/widest-vertical-area-between-two-points-containing-no-points/
题意:
给你
n
个二维平面上的点points
,其中points[i] = [xi, yi]
,请你返回两点之间内部不包含任何点的 最宽垂直区域 的宽度。垂直区域 的定义是固定宽度,而 y 轴上无限延伸的一块区域(也就是高度为无穷大)。 最宽垂直区域 为宽度最大的一个垂直区域。
请注意,垂直区域 边上 的点 不在 区域内。
2023年3月31日
leetcode2367. 算术三元组的数目
链接地址:https://leetcode.cn/problems/number-of-arithmetic-triplets/
题意:
给你一个下标从 0 开始、严格递增 的整数数组
nums
和一个正整数diff
。如果满足下述全部条件,则三元组(i, j, k)
就是一个 算术三元组 :
i < j < k
,nums[j] - nums[i] == diff
且nums[k] - nums[j] == diff
返回不同 算术三元组 的数目。