2022年11月刷题记录
2022年11月1日
leetcode1662. 检查两个字符串数组是否相等
链接地址:https://leetcode.cn/problems/check-if-two-string-arrays-are-equivalent/
题意:
给你两个字符串数组
word1和word2。如果两个数组表示的字符串相同,返回true;否则,返回false。数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。
2022年11月2日
leetcode1620. 网络信号最好的坐标
链接地址:https://leetcode.cn/problems/coordinate-with-maximum-network-quality/
题意:
给你一个数组 towers 和一个整数 radius 。
数组 towers 中包含一些网络信号塔,其中 towers[i] = [xi, yi, qi] 表示第 i 个网络信号塔的坐标是 (xi, yi) 且信号强度参数为 qi 。所有坐标都是在 X-Y 坐标系内的 整数 坐标。两个坐标之间的距离用 欧几里得距离 计算。
整数 radius 表示一个塔 能到达 的 最远距离 。如果一个坐标跟塔的距离在 radius 以内,那么该塔的信号可以到达该坐标。在这个范围以外信号会很微弱,所以 radius 以外的距离该塔是 不能到达的 。
如果第 i 个塔能到达 (x, y) ,那么该塔在此处的信号为 ⌊qi / (1 + d)⌋ ,其中 d 是塔跟此坐标的距离。一个坐标的 信号强度 是所有 能到达 该坐标的塔的信号强度之和。
请你返回数组 [cx, cy] ,表示 信号强度 最大的 整数 坐标点 (cx, cy) 。如果有多个坐标网络信号一样大,请你返回字典序最小的 非负 坐标。
2022年11月3日
leetcode1668. 最大重复子字符串
链接地址:https://leetcode.cn/problems/maximum-repeating-substring/
题意:
给你一个字符串
sequence,如果字符串word连续重复k次形成的字符串是sequence的一个子字符串,那么单词word的 重复值为k。单词word的 最大重复值 是单词word在sequence中最大的重复值。如果word不是sequence的子串,那么重复值k为0。给你一个字符串
sequence和word,请你返回 最大重复值k。
2022年11月4日
leetcode754. 到达终点数字
链接地址:https://leetcode.cn/problems/reach-a-number/
题意:
在一根无限长的数轴上,你站在
0的位置。终点在target的位置。你可以做一些数量的移动
numMoves:
- 每次你可以选择向左或向右移动。
- 第
i次移动(从i == 1开始,到i == numMoves),在选择的方向上走i步。给定整数
target,返回 到达目标所需的 最小 移动次数(即最小numMoves) 。
2022年11月5日
leetcode1106. 解析布尔表达式
链接地址:https://leetcode.cn/problems/parsing-a-boolean-expression/
题意:
给你一个以字符串形式表述的 布尔表达式(boolean)
expression,返回该式的运算结果。有效的表达式需遵循以下约定:
"t",运算结果为True"f",运算结果为False"!(expr)",运算过程为对内部表达式expr进行逻辑 非的运算(NOT)"&(expr1,expr2,...)",运算过程为对 2 个或以上内部表达式expr1, expr2, ...进行逻辑 与的运算(AND)"|(expr1,expr2,...)",运算过程为对 2 个或以上内部表达式expr1, expr2, ...进行逻辑 或的运算(OR)
2022年11月6日
leetcode1678. 设计 Goal 解析器
链接地址:https://leetcode.cn/problems/goal-parser-interpretation/description/
题意:
请你设计一个可以解释字符串
command的 Goal 解析器 。command由"G"、"()"和/或"(al)"按某种顺序组成。Goal 解析器会将"G"解释为字符串"G"、"()"解释为字符串"o","(al)"解释为字符串"al"。然后,按原顺序将经解释得到的字符串连接成一个字符串。给你字符串
command,返回 Goal 解析器 对command的解释结果。
2022年11月7日
leetcode816. 模糊坐标
链接地址:https://leetcode.cn/problems/ambiguous-coordinates/
题意:
我们有一些二维坐标,如
"(1, 3)"或"(2, 0.5)",然后我们移除所有逗号,小数点和空格,得到一个字符串S。返回所有可能的原始字符串到一个列表中。原始的坐标表示法不会存在多余的零,所以不会出现类似于"00", "0.0", "0.00", "1.0", "001", "00.01"或一些其他更小的数来表示坐标。此外,一个小数点前至少存在一个数,所以也不会出现“.1”形式的数字。
最后返回的列表可以是任意顺序的。而且注意返回的两个数字中间(逗号之后)都有一个空格。
2022年11月8日
leetcode1684. 统计一致字符串的数目
链接地址:https://leetcode.cn/problems/count-the-number-of-consistent-strings/
题意:
给你一个由不同字符组成的字符串
allowed和一个字符串数组words。如果一个字符串的每一个字符都在allowed中,就称这个字符串是 一致字符串 。请你返回
words数组中 一致字符串 的数目。
2022年11月9日
leetcode764. 最大加号标志
链接地址:https://leetcode.cn/problems/largest-plus-sign/description/
题意:
求矩阵中联通的最大“加号”
解题思路:
求图最大面积问题,我们可以统一归为DP问题
将4个方向拆解,每个方向能延伸多少是可以传递的,因此可以用dp计算每个方向可以延伸多少,在4个方向中取min即可得到‘+’的最大阶数。
2022年11月10日
leetcode864. 获取所有钥匙的最短路径
链接地址:https://leetcode.cn/problems/shortest-path-to-get-all-keys/
题意:
给定一个二维网格
grid,其中:
- '.' 代表一个空房间
- '#' 代表一堵
- '@' 是起点
- 小写字母代表钥匙
- 大写字母代表锁
我们从起点开始出发,一次移动是指向四个基本方向之一行走一个单位空间。我们不能在网格外面行走,也无法穿过一堵墙。如果途经一个钥匙,我们就把它捡起来。除非我们手里有对应的钥匙,否则无法通过锁。
假设 k 为 钥匙/锁 的个数,且满足
1 <= k <= 6,字母表中的前k个字母在网格中都有自己对应的一个小写和一个大写字母。换言之,每个锁有唯一对应的钥匙,每个钥匙也有唯一对应的锁。另外,代表钥匙和锁的字母互为大小写并按字母顺序排列。返回获取所有钥匙所需要的移动的最少次数。如果无法获取所有钥匙,返回
-1。
2022年11月11日
leetcode1704. 判断字符串的两半是否相似
链接地址:https://leetcode.cn/problems/determine-if-string-halves-are-alike/
题意:
给你一个偶数长度的字符串
s。将其拆分成长度相同的两半,前一半为a,后一半为b。两个字符串 相似 的前提是它们都含有相同数目的元音(
'a','e','i','o','u','A','E','I','O','U')。注意,s可能同时含有大写和小写字母。如果
a和b相似,返回true;否则,返回false。
2022年11月12日
leetcode790. 多米诺和托米诺平铺
链接地址:https://leetcode.cn/problems/domino-and-tromino-tiling/
题意:
有两种形状的瓷砖:一种是
2 x 1的多米诺形,另一种是形如 "L" 的托米诺形。两种形状都可以旋转。给定整数 n ,返回可以平铺
2 x n的面板的方法的数量。返回对109 + 7取模 的值。平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。
2022年11月13日
leetcode791. 自定义字符串排序
链接地址:https://leetcode.cn/problems/custom-sort-string/
题意:
给定两个字符串
order和s。order的所有单词都是 唯一 的,并且以前按照一些自定义的顺序排序。对
s的字符进行置换,使其与排序的order相匹配。更具体地说,如果在order中的字符x出现字符y之前,那么在排列后的字符串中,x也应该出现在y之前。返回 满足这个性质的
s的任意排列 。
2022年11月14日
leetcode69. x 的平方根
链接地址:https://leetcode.cn/problems/sqrtx/
题意:
给你一个非负整数
x,计算并返回x的 算术平方根 。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如
pow(x, 0.5)或者x ** 0.5。
2022年11月15日
leetcode1710. 卡车上的最大单元数
链接地址:https://leetcode.cn/problems/maximum-units-on-a-truck/
题意:
请你将一些箱子装在 一辆卡车 上。给你一个二维数组
boxTypes,其中boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi]:
numberOfBoxesi是类型i的箱子的数量。numberOfUnitsPerBoxi是类型i每个箱子可以装载的单元数量。整数
truckSize表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过truckSize,你就可以选择任意箱子装到卡车上。返回卡车可以装载 单元 的 最大 总数。
2022年11月16日
leetcode775. 全局倒置与局部倒置
链接地址:https://leetcode.cn/problems/global-and-local-inversions/
题意:
给你一个长度为
n的整数数组nums,表示由范围[0, n - 1]内所有整数组成的一个排列。全局倒置 的数目等于满足下述条件不同下标对
(i, j)的数目:
0 <= i < j < nnums[i] > nums[j]局部倒置 的数目等于满足下述条件的下标
i的数目:
0 <= i < n - 1nums[i] > nums[i + 1]当数组
nums中 全局倒置 的数量等于 局部倒置 的数量时,返回true;否则,返回false。
2022年11月17日
leetcode792. 匹配子序列的单词数
链接地址:https://leetcode.cn/problems/number-of-matching-subsequences/
题意:
给定字符串
s和字符串数组words, 返回words[i]中是s的子序列的单词个数 。字符串的 子序列 是从原始字符串中生成的新字符串,可以从中删去一些字符(可以是none),而不改变其余字符的相对顺序。
- 例如,
“ace”是“abcde”的子序列。
解题思路:https://leetcode.cn/problems/number-of-matching-subsequences/solutions/1975527/by-lcbin-gwyj/
2022年11月18日
leetcode891. 子序列宽度之和
链接地址:https://leetcode.cn/problems/sum-of-subsequence-widths/
题意:
一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。
给你一个整数数组
nums,返回nums的所有非空 子序列 的 宽度之和 。由于答案可能非常大,请返回对109 + 7取余 后的结果。子序列 定义为从一个数组里删除一些(或者不删除)元素,但不改变剩下元素的顺序得到的数组。例如,
[3,6,2,7]就是数组[0,3,1,6,2,2,7]的一个子序列。
解题思路:
【C++】数学(乘法)、转换思路为:计算每个数的贡献,即在所有子序列中当了多少次”大哥“和”小弟“
- 假如数组:[2,1,3],因为子序列顺序不会对结果产生影响
- 比如它的子序列[1], [2], [3], [2,1], [2,3], [1,3], [2,1,3] 跟[1,2,3]的子序列[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]最终结果是一样的
- 所以我们按照递增排序后讨论,这样每个元素都比它左边大或相等(作为最大值),比它右边小(作为最小值)
- 那么我们只需要讨论每个元素左右的贡献值,我们不妨拿数字2作为例子,那么它作为最大值贡献了2i次(i=1,排序后),作为最小值贡献了2(n-i-1)次,可以用数学归纳证明(这里略),注:贡献都包含本身统计,结果相减没影响
- 结果就是每个数贡献值相加sum(2i-2(n-i-1)) * nums[i])
2022年11月19日
leetcode1732. 找到最高海拔
链接地址:https://leetcode.cn/problems/find-the-highest-altitude/
题意:
有一个自行车手打算进行一场公路骑行,这条路线总共由
n + 1个不同海拔的点组成。自行车手从海拔为0的点0开始骑行。给你一个长度为
n的整数数组gain,其中gain[i]是点i和点i + 1的 净海拔高度差(0 <= i < n)。请你返回 最高点的海拔 。
2022年11月20日
leetcode799. 香槟塔
链接地址:https://leetcode.cn/problems/champagne-tower/
题意:
我们把玻璃杯摆成金字塔的形状,其中 第一层 有
1个玻璃杯, 第二层 有2个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟。从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)
例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾倒了两杯香槟后,第二层的两个玻璃杯各自盛放一半的香槟。在倒三杯香槟后,第二层的香槟满了 - 此时总共有三个满的玻璃杯。在倒第四杯后,第三层中间的玻璃杯盛放了一半的香槟,他两边的玻璃杯各自盛放了四分之一的香槟。
现在当倾倒了非负整数杯香槟后,返回第
i行j个玻璃杯所盛放的香槟占玻璃杯容积的比例(i和j都从0开始)。
2022年11月21日
leetcode808. 分汤
链接地址:https://leetcode.cn/problems/soup-servings/
题意:
有 A 和 B 两种类型 的汤。一开始每种类型的汤有
n毫升。有四种分配操作:
- 提供
100ml的 汤A 和0ml的 汤B 。- 提供
75ml的 汤A 和25ml的 汤B 。- 提供
50ml的 汤A 和50ml的 汤B 。- 提供
25ml的 汤A 和75ml的 汤B 。当我们把汤分配给某人之后,汤就没有了。每个回合,我们将从四种概率同为
0.25的操作中进行分配选择。如果汤的剩余量不足以完成某次操作,我们将尽可能分配。当两种类型的汤都分配完时,停止操作。注意 不存在先分配
100ml 汤B 的操作。需要返回的值: 汤A 先分配完的概率 + 汤A和汤B 同时分配完的概率 / 2。返回值在正确答案
10-5的范围内将被认为是正确的。
解题思路:
https://leetcode.cn/problems/soup-servings/solutions/1982969/by-lcbin-44pu/
2022年11月22日
leetcode878. 第 N 个神奇数字
链接地址:https://leetcode.cn/problems/nth-magical-number/
题意:
一个正整数如果能被
a或b整除,那么它是神奇的。给定三个整数
n,a,b,返回第n个神奇的数字。因为答案可能很大,所以返回答案 对109 + 7取模 后的值。
2022年11月23日
leetcode1742. 盒子中小球的最大数量
链接地址:https://leetcode.cn/problems/maximum-number-of-balls-in-a-box/
题意:
你在一家生产小球的玩具厂工作,有
n个小球,编号从lowLimit开始,到highLimit结束(包括lowLimit和highLimit,即n == highLimit - lowLimit + 1)。另有无限数量的盒子,编号从1到infinity。你的工作是将每个小球放入盒子中,其中盒子的编号应当等于小球编号上每位数字的和。例如,编号
321的小球应当放入编号3 + 2 + 1 = 6的盒子,而编号10的小球应当放入编号1 + 0 = 1的盒子。给你两个整数
lowLimit和highLimit,返回放有最多小球的盒子中的小球数量。如果有多个盒子都满足放有最多小球,只需返回其中任一盒子的小球数量。
2022年11月24日
leetcode795. 区间子数组个数
链接地址:https://leetcode.cn/problems/number-of-subarrays-with-bounded-maximum/
题意:
给你一个整数数组
nums和两个整数:left及right。找出nums中连续、非空且其中最大元素在范围[left, right]内的子数组,并返回满足条件的子数组的个数。生成的测试用例保证结果符合 32-bit 整数范围。
2022年11月25日
leetcode809. 情感丰富的文字
链接地址:https://leetcode.cn/problems/expressive-words/
题意:
有时候人们会用重复写一些字母来表示额外的感受,比如
"hello" -> "heeellooo","hi" -> "hiii"。我们将相邻字母都相同的一串字符定义为相同字母组,例如:"h", "eee", "ll", "ooo"。对于一个给定的字符串 S ,如果另一个单词能够通过将一些字母组扩张从而使其和 S 相同,我们将这个单词定义为可扩张的(stretchy)。扩张操作定义如下:选择一个字母组(包含字母
c),然后往其中添加相同的字母c使其长度达到 3 或以上。例如,以 "hello" 为例,我们可以对字母组 "o" 扩张得到 "hellooo",但是无法以同样的方法得到 "helloo" 因为字母组 "oo" 长度小于 3。此外,我们可以进行另一种扩张 "ll" -> "lllll" 以获得 "helllllooo"。如果
s = "helllllooo",那么查询词 "hello" 是可扩张的,因为可以对它执行这两种扩张操作使得query = "hello" -> "hellooo" -> "helllllooo" = s。输入一组查询单词,输出其中可扩张的单词数量。
2022年11月26日
leetcode3. 无重复字符的最长子串
链接地址:https://leetcode.cn/problems/longest-substring-without-repeating-characters/
题意:
给定一个字符串
s,请你找出其中不含有重复字符的 最长子串 的长度。
2022年11月27日
leetcode1752. 检查数组是否经排序和轮转得到
链接地址:https://leetcode.cn/problems/check-if-array-is-sorted-and-rotated/
题意:
给你一个数组
nums。nums的源数组中,所有元素与nums相同,但按非递减顺序排列。如果
nums能够由源数组轮转若干位置(包括 0 个位置)得到,则返回true;否则,返回false。源数组中可能存在 重复项 。
注意:我们称数组
A在轮转x个位置后得到长度相同的数组B,当它们满足A[i] == B[(i+x) % A.length],其中%为取余运算。
2022年11月28日
leetcode813. 最大平均值和的分组
链接地址:https://leetcode.cn/problems/largest-sum-of-averages/
题意:
给定数组
nums和一个整数k。我们将给定的数组nums分成 最多k个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。注意我们必须使用
nums数组中的每一个数进行分组,并且分数不一定需要是整数。返回我们所能得到的最大 分数 是多少。答案误差在 10-6 内被视为是正确的。
2022年11月29日
leetcode1758. 生成交替二进制字符串的最少操作数
链接地址:https://leetcode.cn/problems/minimum-changes-to-make-alternating-binary-string/
题意:
给你一个仅由字符
'0'和'1'组成的字符串s。一步操作中,你可以将任一'0'变成'1',或者将'1'变成'0'。交替字符串 定义为:如果字符串中不存在相邻两个字符相等的情况,那么该字符串就是交替字符串。例如,字符串
"010"是交替字符串,而字符串"0100"不是。返回使
s变成 交替字符串 所需的 最少 操作数。
2022年11月30日
leetcode895. 最大频率栈
链接地址:https://leetcode.cn/problems/maximum-frequency-stack/
题意:
设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。
实现
FreqStack类:
FreqStack()构造一个空的堆栈。void push(int val)将一个整数val压入栈顶。int pop()删除并返回堆栈中出现频率最高的元素。
- 如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。

浙公网安备 33010602011771号