2023年12月刷题记录
2023年12月1日
【leetcode】2661. 找出叠涂元素
题意:
给你一个下标从 0 开始的整数数组
arr
和一个m x n
的整数 矩阵mat
。arr
和mat
都包含范围[1,m * n]
内的 所有 整数。从下标
0
开始遍历arr
中的每个下标i
,并将包含整数arr[i]
的mat
单元格涂色。请你找出
arr
中在mat
的某一行或某一列上都被涂色且下标最小的元素,并返回其下标i
。
2023年12月2日
【leetcode】1094. 拼车
题意:
车上最初有
capacity
个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)给定整数
capacity
和一个数组trips
,trip[i] = [numPassengersi, fromi, toi]
表示第i
次旅行有numPassengersi
乘客,接他们和放他们的位置分别是fromi
和toi
。这些位置是从汽车的初始位置向东的公里数。当且仅当你可以在所有给定的行程中接送所有乘客时,返回
true
,否则请返回false
。
2023年12月3日
【leetcode】1423. 可获得的最大点数
题意:
几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组
cardPoints
给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿
k
张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。
给你一个整数数组
cardPoints
和整数k
,请你返回可以获得的最大点数。
2023年12月4日
【leetcode】1038. 从二叉搜索树到更大和树
题意:
给定一个二叉搜索树
root
(BST),请将它的每个节点的值替换成树中大于或者等于该节点值的所有节点值之和。提醒一下, 二叉搜索树 满足下列约束条件:
- 节点的左子树仅包含键 小于 节点键的节点。
- 节点的右子树仅包含键 大于 节点键的节点。
- 左右子树也必须是二叉搜索树。
2023年12月5日
【leetcode】2477. 到达首都的最少油耗
题意:
给你一棵
n
个节点的树(一个无向、连通、无环图),每个节点表示一个城市,编号从0
到n - 1
,且恰好有n - 1
条路。0
是首都。给你一个二维整数数组roads
,其中roads[i] = [ai, bi]
,表示城市ai
和bi
之间有一条 双向路 。每个城市里有一个代表,他们都要去首都参加一个会议。
每座城市里有一辆车。给你一个整数
seats
表示每辆车里面座位的数目。城市里的代表可以选择乘坐所在城市的车,或者乘坐其他城市的车。相邻城市之间一辆车的油耗是一升汽油。
请你返回到达首都最少需要多少升汽油。
2023年12月6日
【leetcode】165. 比较版本号
题意:
给你两个版本号
version1
和version2
,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个
'.'
连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33
和0.1
都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值 。也就是说,修订号
1
和修订号001
相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为0
。例如,版本1.0
小于版本1.1
,因为它们下标为0
的修订号相同,而下标为1
的修订号分别为0
和1
,0 < 1
。返回规则如下:
- 如果
*version1* > *version2*
返回1
,- 如果
*version1* < *version2*
返回-1
,- 除此之外返回
0
。
2023年12月7日
【leetcode】1466. 重新规划路线
题意:
n
座城市,从0
到n-1
编号,其间共有n-1
条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。路线用
connections
表示,其中connections[i] = [a, b]
表示从城市a
到b
的一条有向路线。今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。
请你帮助重新规划路线方向,使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。
题目数据 保证 每个城市在重新规划路线方向后都能到达城市 0 。
2023年12月8日
【leetcode】2008. 出租车的最大盈利
题意:
你驾驶出租车行驶在一条有
n
个地点的路上。这n
个地点从近到远编号为1
到n
,你想要从1
开到n
,通过接乘客订单盈利。你只能沿着编号递增的方向前进,不能改变方向。乘客信息用一个下标从 0 开始的二维数组
rides
表示,其中rides[i] = [starti, endi, tipi]
表示第i
位乘客需要从地点starti
前往endi
,愿意支付tipi
元的小费。每一位 你选择接单的乘客
i
,你可以 盈利endi - starti + tipi
元。你同时 最多 只能接一个订单。给你
n
和rides
,请你返回在最优接单方案下,你能盈利 最多 多少元。注意:你可以在一个地点放下一位乘客,并在同一个地点接上另一位乘客。
2023年12月9日
【leetcode】2048. 下一个更大的数值平衡数
题意:
如果整数
x
满足:对于每个数位d
,这个数位 恰好 在x
中出现d
次。那么整数x
就是一个 数值平衡数 。给你一个整数
n
,请你返回 严格大于n
的 最小数值平衡数 。
2023年12月10日
【leetcode】70. 爬楼梯
题意:
假设你正在爬楼梯。需要
n
阶你才能到达楼顶。每次你可以爬
1
或2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
2023年12月11日
【leetcode】1631. 最小体力消耗路径
题意:
你准备参加一场远足活动。给你一个二维
rows x columns
的地图heights
,其中heights[row][col]
表示格子(row, col)
的高度。一开始你在最左上角的格子(0, 0)
,且你希望去最右下角的格子(rows-1, columns-1)
(注意下标从 0 开始编号)。你每次可以往 上,下,左,右 四个方向之一移动,你想要找到耗费 体力 最小的一条路径。一条路径耗费的 体力值 是路径上相邻格子之间 高度差绝对值 的 最大值 决定的。
请你返回从左上角走到右下角的最小 体力消耗值 。
2023年12月12日
【leetcode】2454. 下一个更大元素 IV
题意:
给你一个下标从 0 开始的非负整数数组
nums
。对于nums
中每一个整数,你必须找到对应元素的 第二大 整数。如果
nums[j]
满足以下条件,那么我们称它为nums[i]
的 第二大 整数:
j > i
nums[j] > nums[i]
- 恰好存在 一个
k
满足i < k < j
且nums[k] > nums[i]
。如果不存在
nums[j]
,那么第二大整数为-1
。
- 比方说,数组
[1, 2, 4, 3]
中,1
的第二大整数是4
,2
的第二大整数是3
,3
和4
的第二大整数是-1
。请你返回一个整数数组
answer
,其中answer[i]
是nums[i]
的第二大整数。
2023年12月13日
【leetcode】2697. 字典序最小回文串
题意:
给你一个由 小写英文字母 组成的字符串
s
,你可以对其执行一些操作。在一步操作中,你可以用其他小写英文字母 替换s
中的一个字符。请你执行 尽可能少的操作 ,使
s
变成一个 回文串 。如果执行 最少 操作次数的方案不止一种,则只需选取 字典序最小 的方案。对于两个长度相同的字符串
a
和b
,在a
和b
出现不同的第一个位置,如果该位置上a
中对应字母比b
中对应字母在字母表中出现顺序更早,则认为a
的字典序比b
的字典序要小。返回最终的回文字符串。
2023年12月14日
【leetcode】739. 每日温度
题意:
给定一个整数数组
temperatures
,表示每天的温度,返回一个数组answer
,其中answer[i]
是指对于第i
天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0
来代替。
2023年12月15日
【leetcode】2415. 反转二叉树的奇数层
题意:
给你一棵 完美 二叉树的根节点
root
,请你反转这棵树中每个 奇数 层的节点值。
- 例如,假设第 3 层的节点值是
[2,1,3,4,7,11,29,18]
,那么反转后它应该变成[18,29,11,7,4,3,1,2]
。反转后,返回树的根节点。
完美 二叉树需满足:二叉树的所有父节点都有两个子节点,且所有叶子节点都在同一层。
节点的 层数 等于该节点到根节点之间的边数。
2023年12月16日
【leetcode】1475. 商品折扣后的最终价格
题意:
给你一个数组
prices
,其中prices[i]
是商店里第i
件商品的价格。商店里正在进行促销活动,如果你要买第
i
件商品,那么你可以得到与prices[j]
相等的折扣,其中j
是满足j > i
且prices[j] <= prices[i]
的 最小下标 ,如果没有满足条件的j
,你将没有任何折扣。请你返回一个数组,数组中第
i
个元素是折扣后你购买商品i
最终需要支付的价格。
2023年12月17日
【leetcode】746. 使用最小花费爬楼梯
题意:
给你一个整数数组
cost
,其中cost[i]
是从楼梯第i
个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为
0
或下标为1
的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。
2023年12月18日
【leetcode】162. 寻找峰值
题意:
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组
nums
,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设
nums[-1] = nums[n] = -∞
。你必须实现时间复杂度为
O(log n)
的算法来解决此问题。
2023年12月19日
【leetcode】1901. 寻找峰值 II
题意:
一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。
给你一个 从 0 开始编号 的
m x n
矩阵mat
,其中任意两个相邻格子的值都 不相同 。找出 任意一个 峰值mat[i][j]
并 返回其位置[i,j]
。你可以假设整个矩阵周边环绕着一圈值为
-1
的格子。要求必须写出时间复杂度为
O(m log(n))
或O(n log(m))
的算法。
2023年12月20日
【leetcode】2828. 判别首字母缩略词
题意:
给你一个字符串数组
words
和一个字符串s
,请你判断s
是不是words
的 首字母缩略词 。如果可以按顺序串联
words
中每个字符串的第一个字符形成字符串s
,则认为s
是words
的首字母缩略词。例如,"ab"
可以由["apple", "banana"]
形成,但是无法从["bear", "aardvark"]
形成。如果
s
是words
的首字母缩略词,返回true
;否则,返回false
。
2023年12月21日
【leetcode】2866. 美丽塔 II
题意:
给你一个长度为
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]
请你返回满足 美丽塔 要求的方案中,高度和的最大值 。
2023年12月22日
【leetcode】496. 下一个更大元素 I
题意:
nums1
中数字x
的 下一个更大元素 是指x
在nums2
中对应位置 右侧 的 第一个 比x
大的元素。给你两个 没有重复元素 的数组
nums1
和nums2
,下标从 0 开始计数,其中nums1
是nums2
的子集。对于每个
0 <= i < nums1.length
,找出满足nums1[i] == nums2[j]
的下标j
,并且在nums2
确定nums2[j]
的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是-1
。返回一个长度为
nums1.length
的数组ans
作为答案,满足ans[i]
是如上所述的 下一个更大元素 。
2023年12月23日
【leetcode】1962. 移除石子使总数最小
题意:
给你一个整数数组
piles
,数组 下标从 0 开始 ,其中piles[i]
表示第i
堆石子中的石子数量。另给你一个整数k
,请你执行下述操作 恰好k
次:
- 选出任一石子堆
piles[i]
,并从中 移除floor(piles[i] / 2)
颗石子。注意:你可以对 同一堆 石子多次执行此操作。
返回执行
k
次操作后,剩下石子的 最小 总数。
floor(x)
为 小于 或 等于x
的 最大 整数。(即,对x
向下取整)。
2023年12月24日
【leetcode】1954. 收集足够苹果的最小花园周长
题意:
给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标
(i, j)
处的苹果树有|i| + |j|
个苹果。你将会买下正中心坐标是
(0, 0)
的一块 正方形土地 ,且每条边都与两条坐标轴之一平行。给你一个整数
neededApples
,请你返回土地的 最小周长 ,使得 至少 有neededApples
个苹果在土地 里面或者边缘上。
|x|
的值定义为:
- 如果
x >= 0
,那么值为x
- 如果
x < 0
,那么值为-x
2023年12月25日
【leetcode】1276. 不浪费原料的汉堡制作方案
题意:
圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。
给你两个整数
tomatoSlices
和cheeseSlices
,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下:
- 巨无霸汉堡:4 片番茄和 1 片奶酪
- 小皇堡:2 片番茄和 1 片奶酪
请你以
[total_jumbo, total_small]
([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使得剩下的番茄片tomatoSlices
和奶酪片cheeseSlices
的数量都是0
。如果无法使剩下的番茄片
tomatoSlices
和奶酪片cheeseSlices
的数量为0
,就请返回[]
。
2023年12月26日
【leetcode】503. 下一个更大元素 II
题意:
给定一个循环数组
nums
(nums[nums.length - 1]
的下一个元素是nums[0]
),返回nums
中每个元素的 下一个更大元素 。数字
x
的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1
。
2023年12月27日
【leetcode】2660. 保龄球游戏的获胜者
题意:
给你两个下标从 0 开始的整数数组
player1
和player2
,分别表示玩家 1 和玩家 2 击中的瓶数。保龄球比赛由
n
轮组成,每轮的瓶数恰好为10
。假设玩家在第
i
轮中击中x_i
个瓶子。玩家第i
轮的价值为:
- 如果玩家在该轮的前两轮的任何一轮中击中了
10
个瓶子,则为2xi
。- 否则,为
x_i
。玩家的得分是其
n
轮价值的总和。返回
- 如果玩家 1 的得分高于玩家 2 的得分,则为
1
;- 如果玩家 2 的得分高于玩家 1 的得分,则为
2
;- 如果平局,则为
0
。
2023年12月28日
【leetcode】2735. 收集巧克力
题意:
给你一个长度为
n
、下标从 0 开始的整数数组nums
,表示收集不同巧克力的成本。每个巧克力都对应一个不同的类型,最初,位于下标i
的巧克力就对应第i
个类型。在一步操作中,你可以用成本
x
执行下述行为:
- 同时修改所有巧克力的类型,将巧克力的类型
i^th
修改为类型((i + 1) mod n)^th
。假设你可以执行任意次操作,请返回收集所有类型巧克力所需的最小成本。
2023年12月29日
【leetcode】2706. 购买两块巧克力
题意:
给你一个整数数组
prices
,它表示一个商店里若干巧克力的价格。同时给你一个整数money
,表示你一开始拥有的钱数。你必须购买 恰好 两块巧克力,而且剩余的钱数必须是 非负数 。同时你想最小化购买两块巧克力的总花费。
请你返回在购买两块巧克力后,最多能剩下多少钱。如果购买任意两块巧克力都超过了你拥有的钱,请你返回
money
。注意剩余钱数必须是非负数。
2023年12月30日
【leetcode】1185. 一周中的第几天
题意:
给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。
输入为三个整数:
day
、month
和year
,分别表示日、月、年。您返回的结果必须是这几个值中的一个
{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
。
2023年12月31日
【leetcode】1154. 一年中的第几天
题意:
给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。