2024年6月刷题记录
2024年6月1日
【leetcode】2928. 给小朋友们分糖果 I
题意:
给你两个正整数
n
和limit
。请你将
n
颗糖果分给3
位小朋友,确保没有任何小朋友得到超过limit
颗糖果,请你返回满足此条件下的 总方案数 。
2024年6月2日
【leetcode】575. 分糖果
题意:
Alice 有
n
枚糖,其中第i
枚糖的类型为candyType[i]
。Alice 注意到她的体重正在增长,所以前去拜访了一位医生。医生建议 Alice 要少摄入糖分,只吃掉她所有糖的
n / 2
即可(n
是一个偶数)。Alice 非常喜欢这些糖,她想要在遵循医生建议的情况下,尽可能吃到最多不同种类的糖。给你一个长度为
n
的整数数组candyType
,返回: Alice 在仅吃掉n / 2
枚糖的情况下,可以吃到糖的 最多 种类数。
2024年6月3日
【leetcode】1103. 分糖果 II
题意:
排排坐,分糖果。
我们买了一些糖果
candies
,打算把它们分给排好队的n = num_people
个小朋友。给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友
n
颗糖果。然后,我们再回到队伍的起点,给第一个小朋友
n + 1
颗糖果,第二个小朋友n + 2
颗,依此类推,直到给最后一个小朋友2 * n
颗糖果。重复上述过程(每次都比上一次多给出一颗糖果,当到达队伍终点后再次从队伍起点开始),直到我们分完所有的糖果。注意,就算我们手中的剩下糖果数不够(不比前一次发出的糖果多),这些糖果也会全部发给当前的小朋友。
返回一个长度为
num_people
、元素之和为candies
的数组,以表示糖果的最终分发情况(即ans[i]
表示第i
个小朋友分到的糖果数)。
2024年6月4日
【leetcode】3067. 在带权树网络中统计可连接服务器对数目
题意:
给你一棵无根带权树,树中总共有
n
个节点,分别表示n
个服务器,服务器从0
到n - 1
编号。同时给你一个数组edges
,其中edges[i] = [ai, bi, weighti]
表示节点ai
和bi
之间有一条双向边,边的权值为weighti
。再给你一个整数signalSpeed
。如果两个服务器
a
,b
和c
满足以下条件,那么我们称服务器a
和b
是通过服务器c
可连接的 :
a < b
,a != c
且b != c
。- 从
c
到a
的距离是可以被signalSpeed
整除的。- 从
c
到b
的距离是可以被signalSpeed
整除的。- 从
c
到b
的路径与从c
到a
的路径没有任何公共边。请你返回一个长度为
n
的整数数组count
,其中count[i]
表示通过服务器i
可连接 的服务器对的 数目 。
2024年6月5日
【leetcode】169. 多数元素
题意:
给定一个大小为
n
的数组nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋
的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
2024年6月6日
【leetcode】2938. 区分黑球与白球
题意:
桌子上有
n
个球,每个球的颜色不是黑色,就是白色。给你一个长度为
n
、下标从 0 开始的二进制字符串s
,其中1
和0
分别代表黑色和白色的球。在每一步中,你可以选择两个相邻的球并交换它们。
返回「将所有黑色球都移到右侧,所有白色球都移到左侧所需的 最小步数」。
2024年6月7日
【leetcode】3038. 相同分数的最大操作数目 I
题意:
给你一个整数数组
nums
,如果nums
至少 包含2
个元素,你可以执行以下操作:
- 选择
nums
中的前两个元素并将它们删除。一次操作的 分数 是被删除元素的和。
在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。
请你返回按照上述要求 最多 可以进行的操作次数。
2024年6月8日
【leetcode】3040. 相同分数的最大操作数目 II
题意:
给你一个整数数组
nums
,如果nums
至少 包含2
个元素,你可以执行以下操作中的 任意 一个:
- 选择
nums
中最前面两个元素并且删除它们。- 选择
nums
中最后两个元素并且删除它们。- 选择
nums
中第一个和最后一个元素并且删除它们。一次操作的 分数 是被删除元素的和。
在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。
请你返回按照上述要求 最多 可以进行的操作次数。
2024年6月9日
【leetcode】312. 戳气球
题意:
有
n
个气球,编号为0
到n - 1
,每个气球上都标有一个数字,这些数字存在数组nums
中。现在要求你戳破所有的气球。戳破第
i
个气球,你可以获得nums[i - 1] * nums[i] * nums[i + 1]
枚硬币。 这里的i - 1
和i + 1
代表和i
相邻的两个气球的序号。如果i - 1
或i + 1
超出了数组的边界,那么就当它是一个数字为1
的气球。求所能获得硬币的最大数量。
2024年6月10日
【leetcode】881. 救生艇
题意:
给定数组
people
。people[i]
表示第i
个人的体重 ,船的数量不限,每艘船可以承载的最大重量为limit
。每艘船最多可同时载两人,但条件是这些人的重量之和最多为
limit
。返回 承载所有人所需的最小船数 。
2024年6月11日
【leetcode】419. 甲板上的战舰
题意:
给你一个大小为
m x n
的矩阵board
表示甲板,其中,每个单元格可以是一艘战舰'X'
或者是一个空位'.'
,返回在甲板board
上放置的 战舰 的数量。战舰 只能水平或者垂直放置在
board
上。换句话说,战舰只能按1 x k
(1
行,k
列)或k x 1
(k
行,1
列)的形状建造,其中k
可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的战舰)。
2024年6月12日
【leetcode】2806. 取整购买后的账户余额
题意:
一开始,你的银行账户里有
100
块钱。给你一个整数
purchaseAmount
,它表示你在一次购买中愿意支出的金额。在一个商店里,你进行一次购买,实际支出的金额会向 最近 的
10
的 倍数 取整。换句话说,你实际会支付一个 非负 金额roundedAmount
,满足roundedAmount
是10
的倍数且abs(roundedAmount - purchaseAmount)
的值 最小 。如果存在多于一个最接近的
10
的倍数,较大的倍数 是你的实际支出金额。请你返回一个整数,表示你在愿意支出金额为
purchaseAmount
块钱的前提下,购买之后剩下的余额。注意:
0
也是10
的倍数。
2024年6月13日
【leetcode】189. 轮转数组
题意:
给定一个整数数组
nums
,将数组中的元素向右轮转k
个位置,其中k
是非负数。
2024年6月14日
【leetcode】2786. 访问数组中的位置使分数最大
题意:
给你一个下标从 0 开始的整数数组
nums
和一个正整数x
。你 一开始 在数组的位置
0
处,你可以按照下述规则访问数组中的其他位置:
- 如果你当前在位置
i
,那么你可以移动到满足i < j
的 任意 位置j
。- 对于你访问的位置
i
,你可以获得分数nums[i]
。- 如果你从位置
i
移动到位置j
且nums[i]
和nums[j]
的 奇偶性 不同,那么你将失去分数x
。请你返回你能得到的 最大 得分之和。
注意 ,你一开始的分数为
nums[0]
。
2024年6月15日
【leetcode】2779. 数组的最大美丽值
题意:
给你一个下标从 0 开始的整数数组
nums
和一个 非负 整数k
。在一步操作中,你可以执行下述指令:
- 在范围
[0, nums.length - 1]
中选择一个 此前没有选过 的下标i
。- 将
nums[i]
替换为范围[nums[i] - k, nums[i] + k]
内的任一整数。数组的 美丽值 定义为数组中由相等元素组成的最长子序列的长度。
对数组
nums
执行上述操作任意次后,返回数组可能取得的 最大 美丽值。注意:你 只 能对每个下标执行 一次 此操作。
数组的 子序列 定义是:经由原数组删除一些元素(也可能不删除)得到的一个新数组,且在此过程中剩余元素的顺序不发生改变。
2024年6月16日
【leetcode】521. 最长特殊序列 Ⅰ
题意:
给你两个字符串
a
和b
,请返回 这两个字符串中 最长的特殊序列 的长度。如果不存在,则返回-1
。「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。
字符串
s
的子序列是在从s
中删除任意数量的字符后可以获得的字符串。
- 例如,
"abc"
是"aebdc"
的子序列,因为删除"a***e***b***d\***c"
中斜体加粗的字符可以得到"abc"
。"aebdc"
的子序列还包括"aebdc"
、"aeb"
和""
(空字符串)。
2024年6月17日
【leetcode】522. 最长特殊序列 II
题意:
给定字符串列表
strs
,返回其中 最长的特殊序列 的长度。如果最长特殊序列不存在,返回-1
。特殊序列 定义如下:该序列为某字符串 独有的子序列(即不能是其他字符串的子序列)。
s
的 子序列可以通过删去字符串s
中的某些字符实现。
- 例如,
"abc"
是"aebdc"
的子序列,因为您可以删除"aebdc"
中的下划线字符来得到"abc"
。"aebdc"
的子序列还包括"aebdc"
、"aeb"
和 "" (空字符串)。
2024年6月18日
【leetcode】2288. 价格减免
题意:
句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号
'$'
。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个 价格 。
- 例如
"$100"
、"$23"
和"$6"
表示价格,而"100"
、"$"
和"$1e5
不是。给你一个字符串
sentence
表示一个句子和一个整数discount
。对于每个表示价格的单词,都在价格的基础上减免discount%
,并 更新 该单词到句子中。所有更新后的价格应该表示为一个 恰好保留小数点后两位 的数字。返回表示修改后句子的字符串。
注意:所有价格 最多 为
10
位数字。
2024年6月19日
【leetcode】121. 买卖股票的最佳时机
题意:
给定一个数组
prices
,它的第i
个元素prices[i]
表示一支给定股票第i
天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回
0
。
2024年6月20日
【leetcode】2748. 美丽下标对的数目
题意:
给你一个下标从 0 开始的整数数组
nums
。如果下标对i
、j
满足0 ≤ i < j < nums.length
,如果nums[i]
的 第一个数字 和nums[j]
的 最后一个数字 互质 ,则认为nums[i]
和nums[j]
是一组 美丽下标对 。返回
nums
中 美丽下标对 的总数目。对于两个整数
x
和y
,如果不存在大于 1 的整数可以整除它们,则认为x
和y
互质 。换而言之,如果gcd(x, y) == 1
,则认为x
和y
互质,其中gcd(x, y)
是x
和y
的 最大公因数 。
2024年6月21日
【leetcode】LCP 61. 气温变化趋势
题意:
力扣城计划在两地设立「力扣嘉年华」的分会场,气象小组正在分析两地区的气温变化趋势,对于第
i ~ (i+1)
天的气温变化趋势,将根据以下规则判断:
- 若第
i+1
天的气温 高于 第i
天,为 上升 趋势- 若第
i+1
天的气温 等于 第i
天,为 平稳 趋势- 若第
i+1
天的气温 低于 第i
天,为 下降 趋势已知
temperatureA[i]
和temperatureB[i]
分别表示第i
天两地区的气温。 组委会希望找到一段天数尽可能多,且两地气温变化趋势相同的时间举办嘉年华活动。请分析并返回两地气温变化趋势相同的最大连续天数。即最大的
n
,使得第i~i+n
天之间,两地气温变化趋势相同
2024年6月22日
【leetcode】125. 验证回文串
题意:
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串
s
,如果它是 回文串 ,返回true
;否则,返回false
。
2024年6月23日
【leetcode】520. 检测大写字母
题意:
我们定义,在以下情况时,单词的大写用法是正确的:
- 全部字母都是大写,比如
"USA"
。- 单词中所有字母都不是大写,比如
"leetcode"
。- 如果单词不只含有一个字母,只有首字母大写, 比如
"Google"
。给你一个字符串
word
。如果大写用法正确,返回true
;否则,返回false
。
2024年6月24日
【leetcode】503. 下一个更大元素 II
题意:
给定一个循环数组
nums
(nums[nums.length - 1]
的下一个元素是nums[0]
),返回nums
中每个元素的 下一个更大元素 。数字
x
的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出-1
。
2024年6月25日
【leetcode】383. 赎金信
题意:
给你两个字符串:
ransomNote
和magazine
,判断ransomNote
能不能由magazine
里面的字符构成。如果可以,返回
true
;否则返回false
。
magazine
中的每个字符只能在ransomNote
中使用一次。
2024年6月26日
【leetcode】9. 回文数
题意:
给你一个整数
x
,如果x
是一个回文整数,返回true
;否则,返回false
。回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。
2024年6月27日
【leetcode】2734. 执行子串操作后的字典序最小字符串
题意:
给你一个仅由小写英文字母组成的字符串
s
。在一步操作中,你可以完成以下行为:
- 选择
s
的任一非空子字符串,可能是整个字符串,接着将字符串中的每一个字符替换为英文字母表中的前一个字符。例如,'b' 用 'a' 替换,'a' 用 'z' 替换。返回执行上述操作 恰好一次 后可以获得的 字典序最小 的字符串。
子字符串 是字符串中的一个连续字符序列。
现有长度相同的两个字符串
x
和 字符串y
,在满足x[i] != y[i]
的第一个位置i
上,如果x[i]
在字母表中先于y[i]
出现,则认为字符串x
比字符串y
字典序更小 。
2024年6月28日
【leetcode】2742. 给墙壁刷油漆
题意:
给你两个长度为
n
下标从 0 开始的整数数组cost
和time
,分别表示给n
堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠:
- 一位需要 付费 的油漆匠,刷第
i
堵墙需要花费time[i]
单位的时间,开销为cost[i]
单位的钱。- 一位 免费 的油漆匠,刷 任意 一堵墙的时间为
1
单位,开销为0
。但是必须在付费油漆匠 工作 时,免费油漆匠才会工作。请你返回刷完
n
堵墙最少开销为多少。
2024年6月29日
【leetcode】2710. 移除字符串中的尾随零
题意:
给你一个用字符串表示的正整数
num
,请你以字符串形式返回不含尾随零的整数num
。