2023年1月刷题记录
2023年1月1日
leetcode2351. 第一个出现两次的字母
链接地址:https://leetcode.cn/problems/first-letter-to-appear-twice/
题意:
给你一个由小写英文字母组成的字符串
s,请你找出并返回第一个出现 两次 的字母。注意:
- 如果
a的 第二次 出现比b的 第二次 出现在字符串中的位置更靠前,则认为字母a在字母b之前出现两次。s包含至少一个出现两次的字母。
2023年1月2日
leetcode1801. 积压订单中的订单总数
链接地址:https://leetcode.cn/problems/number-of-orders-in-the-backlog/
题意:
给你一个二维整数数组
orders,其中每个orders[i] = [pricei, amounti, orderTypei]表示有amounti笔类型为orderTypei、价格为pricei的订单。订单类型
orderTypei可以分为两种:
0表示这是一批采购订单buy1表示这是一批销售订单sell注意,
orders[i]表示一批共计amounti笔的独立订单,这些订单的价格和类型相同。对于所有有效的i,由orders[i]表示的所有订单提交时间均早于orders[i+1]表示的所有订单。存在由未执行订单组成的 积压订单 。积压订单最初是空的。提交订单时,会发生以下情况:
- 如果该订单是一笔采购订单
buy,则可以查看积压订单中价格 最低 的销售订单sell。如果该销售订单sell的价格 低于或等于 当前采购订单buy的价格,则匹配并执行这两笔订单,并将销售订单sell从积压订单中删除。否则,采购订单buy将会添加到积压订单中。- 反之亦然,如果该订单是一笔销售订单
sell,则可以查看积压订单中价格 最高 的采购订单buy。如果该采购订单buy的价格 高于或等于 当前销售订单sell的价格,则匹配并执行这两笔订单,并将采购订单buy从积压订单中删除。否则,销售订单sell将会添加到积压订单中。输入所有订单后,返回积压订单中的 订单总数 。由于数字可能很大,所以需要返回对 \(10^9 + 7\) 取余的结果。
关键字:有限队列
2023年1月3日
leetcode2042. 检查句子中的数字是否递增
链接地址:https://leetcode.cn/problems/check-if-numbers-are-ascending-in-a-sentence/
题意:
句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格。每个 token 要么是一个由数字
0-9组成的不含前导零的 正整数 ,要么是一个由小写英文字母组成的 单词 。
- 示例,
"a puppy has 2 eyes 4 legs"是一个由 7 个 token 组成的句子:"2"和"4"是数字,其他像"puppy"这样的 tokens 属于单词。给你一个表示句子的字符串
s,你需要检查s中的 全部 数字是否从左到右严格递增(即,除了最后一个数字,s中的 每个 数字都严格小于它 右侧 的数字)。如果满足题目要求,返回
true,否则,返回false。
2023年1月4日
leetcode1802. 有界数组中指定下标处的最大值
链接地址:https://leetcode.cn/problems/maximum-value-at-a-given-index-in-a-bounded-array/
题意:
给你三个正整数
n、index和maxSum。你需要构造一个同时满足下述所有条件的数组nums(下标 从 0 开始 计数):
nums.length == nnums[i]是 正整数 ,其中0 <= i < nabs(nums[i] - nums[i+1]) <= 1,其中0 <= i < n-1nums中所有元素之和不超过maxSumnums[index]的值被 最大化返回你所构造的数组中的
nums[index]。注意:
abs(x)等于x的前提是x >= 0;否则,abs(x)等于-x。
关键词:二分答案
2023年1月5日
leetcode36. 有效的数独
链接地址:https://leetcode.cn/problems/valid-sudoku/
题意:
请你判断一个
9 x 9的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
- 数字
1-9在每一行只能出现一次。- 数字
1-9在每一列只能出现一次。- 数字
1-9在每一个以粗实线分隔的3x3宫内只能出现一次。
2023年1月6日
leetcode2180. 统计各位数字之和为偶数的整数个数
链接地址:https://leetcode.cn/problems/count-integers-with-even-digit-sum/
题意:
给你一个正整数
num,请你统计并返回 小于或等于num且各位数字之和为 偶数 的正整数的数目。正整数的 各位数字之和 是其所有位上的对应数字相加的结果。
2023年1月7日
leetcode1658. 将 x 减到 0 的最小操作数
链接地址:https://leetcode.cn/problems/minimum-operations-to-reduce-x-to-zero/
题意:
给你一个整数数组
nums和一个整数x。每一次操作时,你应当移除数组nums最左边或最右边的元素,然后从x中减去该元素的值。请注意,需要 修改 数组以供接下来的操作使用。如果可以将
x恰好 减到0,返回 最小操作数 ;否则,返回-1。
2023年1月8日
leetcode2185. 统计包含给定前缀的字符串
链接地址:https://leetcode.cn/problems/counting-words-with-a-given-prefix/
题意:
给你一个字符串数组
words和一个字符串pref。返回
words中以pref作为 前缀 的字符串的数目。字符串
s的 前缀 就是s的任一前导连续字符串。
2023年1月9日
leetcode1806. 还原排列的最少操作步数
链接地址:https://leetcode.cn/problems/minimum-number-of-operations-to-reinitialize-a-permutation/
题意:
给你一个偶数
n,已知存在一个长度为n的排列perm,其中perm[i] == i(下标 从 0 开始 计数)。一步操作中,你将创建一个新数组
arr,对于每个i:
- 如果
i % 2 == 0,那么arr[i] = perm[i / 2]- 如果
i % 2 == 1,那么arr[i] = perm[n / 2 + (i - 1) / 2]然后将
arr赋值给perm。要想使
perm回到排列初始值,至少需要执行多少步操作?返回最小的 非零 操作步数。
关键词:模拟、数学
2023年1月10日
leetcode365. 水壶问题
链接地址:https://leetcode.cn/problems/water-and-jug-problem/
题意:
有两个水壶,容量分别为
jug1Capacity和jug2Capacity升。水的供应是无限的。确定是否有可能使用这两个壶准确得到targetCapacity升。如果可以得到
targetCapacity升水,最后请用以上水壶中的一或两个来盛放取得的targetCapacity升水。你可以:
- 装满任意一个水壶
- 清空任意一个水壶
- 从一个水壶向另外一个水壶倒水,直到装满或者倒空
2023年1月11日
leetcode2283. 判断一个数的数字计数是否等于数位的值
链接地址:https://leetcode.cn/problems/check-if-number-has-equal-digit-count-and-digit-value/
题意:
给你一个下标从 0 开始长度为
n的字符串num,它只包含数字。如果对于 每个
0 <= i < n的下标i,都满足数位i在num中出现了num[i]次,那么请你返回true,否则返回false。
2023年1月12日
leetcode1807. 替换字符串中的括号内容
链接地址:https://leetcode.cn/problems/evaluate-the-bracket-pairs-of-a-string/
题意:
给你一个字符串
s,它包含一些括号对,每个括号中包含一个 非空 的键。
- 比方说,字符串
"(name)is(age)yearsold"中,有 两个 括号对,分别包含键"name"和"age"。你知道许多键对应的值,这些关系由二维字符串数组
knowledge表示,其中knowledge[i] = [keyi, valuei],表示键keyi对应的值为valuei。你需要替换 所有 的括号对。当你替换一个括号对,且它包含的键为
keyi时,你需要:
- 将
keyi和括号用对应的值valuei替换。- 如果从
knowledge中无法得知某个键对应的值,你需要将keyi和括号用问号"?"替换(不需要引号)。
knowledge中每个键最多只会出现一次。s中不会有嵌套的括号。请你返回替换 所有 括号对后的结果字符串。
2023年1月13日
leetcode2287. 重排字符形成目标字符串
链接地址:https://leetcode.cn/problems/rearrange-characters-to-make-target-string/
题意:
给你两个下标从 0 开始的字符串
s和target。你可以从s取出一些字符并将其重排,得到若干新的字符串。从
s中取出字符并重新排列,返回可以形成target的 最大 副本数。
2023年1月14日
leetcode1819. 序列中不同最大公约数的数目
链接地址:https://leetcode.cn/problems/number-of-different-subsequences-gcds/
题意:
给你一个由正整数组成的数组
nums。数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。
- 例如,序列
[4,6,16]的最大公约数是2。数组的一个 子序列 本质是一个序列,可以通过删除数组中的某些元素(或者不删除)得到。
- 例如,
[2,5,10]是[1,2,1,**2**,4,1,**5**,**10**]的一个子序列。计算并返回
nums的所有 非空 子序列中 不同 最大公约数的 数目 。
关键词:数学
2023年1月15日
leetcode2293. 极大极小游戏
链接地址:https://leetcode.cn/problems/min-max-game/
题意:
给你一个下标从 0 开始的整数数组
nums,其长度是2的幂。对
nums执行下述算法:
- 设
n等于nums的长度,如果n == 1,终止 算法过程。否则,创建 一个新的整数数组newNums,新数组长度为n / 2,下标从 0 开始。- 对于满足
0 <= i < n / 2的每个 偶数 下标i,将newNums[i]赋值 为min(nums[2 * i], nums[2 * i + 1])。- 对于满足
0 <= i < n / 2的每个 奇数 下标i,将newNums[i]赋值 为max(nums[2 * i], nums[2 * i + 1])。- 用
newNums替换nums。- 从步骤 1 开始 重复 整个过程。
执行算法后,返回
nums中剩下的那个数字。
2023年1月16日
leetcode1813. 句子相似性 III
链接地址:https://leetcode.cn/problems/sentence-similarity-iii/
题意:
一个句子是由一些单词与它们之间的单个空格组成,且句子的开头和结尾没有多余空格。比方说,
"Hello World","HELLO","hello world hello world"都是句子。每个单词都 只 包含大写和小写英文字母。如果两个句子
sentence1和sentence2,可以通过往其中一个句子插入一个任意的句子(可以是空句子)而得到另一个句子,那么我们称这两个句子是 相似的 。比方说,sentence1 = "Hello my name is Jane"且sentence2 = "Hello Jane",我们可以往sentence2中"Hello"和"Jane"之间插入"my name is"得到sentence1。给你两个句子
sentence1和sentence2,如果sentence1和sentence2是相似的,请你返回true,否则返回false。
2023年1月17日
leetcode1814. 统计一个数组中好对子的数目
链接地址:https://leetcode.cn/problems/count-nice-pairs-in-an-array/
题意:
给你一个数组
nums,数组中只包含非负整数。定义rev(x)的值为将整数x各个数字位反转得到的结果。比方说rev(123) = 321,rev(120) = 21。我们称满足下面条件的下标对(i, j)是 好的 :
0 <= i < j < nums.lengthnums[i] + rev(nums[j]) == nums[j] + rev(nums[i])请你返回好下标对的数目。由于结果可能会很大,请将结果对 109 + 7 取余 后返回。
2023年1月18日
leetcode191. 位1的个数
链接地址:https://leetcode.cn/problems/number-of-1-bits/
题意:
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
2023年1月19日
leetcode2299. 强密码检验器 II
链接地址:https://leetcode.cn/problems/strong-password-checker-ii/
题意:
如果一个密码满足以下所有条件,我们称它是一个 强 密码:
- 它有至少
8个字符。- 至少包含 一个小写英文 字母。
- 至少包含 一个大写英文 字母。
- 至少包含 一个数字 。
- 至少包含 一个特殊字符 。特殊字符为:
"!@#$%^&*()-+"中的一个。- 它 不 包含
2个连续相同的字符(比方说"aab"不符合该条件,但是"aba"符合该条件)。给你一个字符串
password,如果它是一个 强 密码,返回true,否则返回false。
2023年1月20日
leetcode1817. 查找用户活跃分钟数
链接地址:https://leetcode.cn/problems/finding-the-users-active-minutes/
题意:
给你用户在 LeetCode 的操作日志,和一个整数
k。日志用一个二维整数数组logs表示,其中每个logs[i] = [IDi, timei]表示 ID 为IDi的用户在timei分钟时执行了某个操作。多个用户 可以同时执行操作,单个用户可以在同一分钟内执行 多个操作 。
指定用户的 用户活跃分钟数(user active minutes,UAM) 定义为用户对 LeetCode 执行操作的 唯一分钟数 。 即使一分钟内执行多个操作,也只能按一分钟计数。
请你统计用户活跃分钟数的分布情况,统计结果是一个长度为
k且 下标从 1 开始计数 的数组answer,对于每个j(1 <= j <= k),answer[j]表示 用户活跃分钟数 等于j的用户数。返回上面描述的答案数组
answer。
过年
2023年1月23日
leetcode2303. 计算应缴税款总额
链接地址:https://leetcode.cn/problems/calculate-amount-paid-in-taxes/
题意:
给你一个下标从 0 开始的二维整数数组
brackets,其中brackets[i] = [upperi, percenti],表示第i个税级的上限是upperi,征收的税率为percenti。税级按上限 从低到高排序(在满足0 < i < brackets.length的前提下,upperi-1 < upperi)。税款计算方式如下:
- 不超过
upper0的收入按税率percent0缴纳- 接着
upper1 - upper0的部分按税率percent1缴纳- 然后
upper2 - upper1的部分按税率percent2缴纳- 以此类推
给你一个整数
income表示你的总收入。返回你需要缴纳的税款总额。与标准答案误差不超10-5的结果将被视作正确答案。
2023年1月24日
leetcode1828. 统计一个圆中点的数目
链接地址:https://leetcode.cn/problems/queries-on-number-of-points-inside-a-circle/
题意:
给你一个数组
points,其中points[i] = [xi, yi],表示第i个点在二维平面上的坐标。多个点可能会有 相同 的坐标。同时给你一个数组
queries,其中queries[j] = [xj, yj, rj],表示一个圆心在(xj, yj)且半径为rj的圆。对于每一个查询
queries[j],计算在第j个圆 内 点的数目。如果一个点在圆的 边界上 ,我们同样认为它在圆 内 。请你返回一个数组
answer,其中answer[j]是第j个查询的答案。
2023年1月25日
leetcode1748. 唯一元素的和
链接地址:https://leetcode.cn/problems/sum-of-unique-elements/
题意:
给你一个整数数组
nums。数组中唯一元素是那些只出现 恰好一次 的元素。请你返回
nums中唯一元素的 和 。
2023年1月26日
leetcode1663. 具有给定数值的最小字符串
链接地址:https://leetcode.cn/problems/smallest-string-with-a-given-numeric-value/
题意:
小写字符 的 数值 是它在字母表中的位置(从
1开始),因此a的数值为1,b的数值为2,c的数值为3,以此类推。字符串由若干小写字符组成,字符串的数值 为各字符的数值之和。例如,字符串
"abe"的数值等于1 + 2 + 5 = 8。给你两个整数
n和k。返回 长度 等于n且 数值 等于k的 字典序最小 的字符串。注意,如果字符串
x在字典排序中位于y之前,就认为x字典序比y小,有以下两种情况:
x是y的一个前缀;- 如果
i是x[i] != y[i]的第一个位置,且x[i]在字母表中的位置比y[i]靠前。
2023年1月27日
leetcode2309. 兼具大小写的最好英文字母
链接地址:https://leetcode.cn/problems/greatest-english-letter-in-upper-and-lower-case/
题意:
给你一个由英文字母组成的字符串
s,请你找出并返回s中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母,则返回一个空字符串。最好 英文字母的大写和小写形式必须 都 在
s中出现。英文字母
b比另一个英文字母a更好 的前提是:英文字母表中,b在a之 后 出现。
2023年1月28日
leetcode1664. 生成平衡数组的方案数
链接地址:https://leetcode.cn/problems/ways-to-make-a-fair-array/
题意:
给你一个整数数组
nums。你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。比方说,如果
nums = [6,1,7,4,1],那么:
- 选择删除下标
1,剩下的数组为nums = [6,7,4,1]。- 选择删除下标
2,剩下的数组为nums = [6,1,4,1]。- 选择删除下标
4,剩下的数组为nums = [6,1,7,4]。如果一个数组满足奇数下标元素的和与偶数下标元素的和相等,该数组就是一个 平衡数组 。
请你返回删除操作后,剩下的数组
nums是 平衡数组 的 方案数 。
2023年1月29日
leetcode2315. 统计星号
链接地址:https://leetcode.cn/problems/count-asterisks/
题意:
给你一个字符串
s,每 两个 连续竖线'|'为 一对 。换言之,第一个和第二个'|'为一对,第三个和第四个'|'为一对,以此类推。请你返回 不在 竖线对之间,
s中'*'的数目。注意,每个竖线
'|'都会 恰好 属于一个对。
2023年1月30日
leetcode1669. 合并两个链表
链接地址:https://leetcode.cn/problems/merge-in-between-linked-lists/
题意:
给你两个链表
list1和list2,它们包含的元素分别为n个和m个。请你将
list1中下标从a到b的全部节点都删除,并将list2接在被删除节点的位置。
2023年1月31日
leetcode2319. 判断矩阵是否是一个 X 矩阵
链接地址:https://leetcode.cn/problems/check-if-matrix-is-x-matrix/
题意:
如果一个正方形矩阵满足下述 全部 条件,则称之为一个 X 矩阵 :
- 矩阵对角线上的所有元素都 不是 0
- 矩阵中所有其他元素都是 0
给你一个大小为
n x n的二维整数数组grid,表示一个正方形矩阵。如果grid是一个 X 矩阵 ,返回true;否则,返回false。

浙公网安备 33010602011771号