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 < n
nums[i] > nums[j]
局部倒置 的数目等于满足下述条件的下标
i
的数目:
0 <= i < n - 1
nums[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
的操作中进行分配选择。如果汤的剩余量不足以完成某次操作,我们将尽可能分配。当两种类型的汤都分配完时,停止操作。注意 不存在先分配
100
ml 汤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/
题意:
标签:11,cn,2022,problems,https,字符串,leetcode,刷题 From: https://www.cnblogs.com/jiamian/p/17017691.html设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。
实现
FreqStack
类:
FreqStack()
构造一个空的堆栈。void push(int val)
将一个整数val
压入栈顶。int pop()
删除并返回堆栈中出现频率最高的元素。
- 如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。