2024年8月刷题记录
2024年8月1日
【leetcode】LCP 40. 心算挑战
题意:
「力扣挑战赛」心算项目的挑战比赛中,要求选手从
N
张卡牌中选出cnt
张卡牌,若这cnt
张卡牌数字总和为偶数,则选手成绩「有效」且得分为cnt
张卡牌数字总和。 给定数组cards
和cnt
,其中cards[i]
表示第i
张卡牌上的数字。 请帮参赛选手计算最大的有效得分。若不存在获取有效得分的卡牌方案,则返回 0。
2024年8月2日
【leetcode】3128. 直角三角形
题意:
给你一个二维 boolean 矩阵
grid
。请你返回使用
grid
中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1 。注意:
- 如果
grid
中 3 个元素满足:一个元素与另一个元素在 同一行,同时与第三个元素在 同一列 ,那么这 3 个元素称为一个 直角三角形 。这 3 个元素互相之间不需要相邻。
2024年8月3日
【leetcode】3143. 正方形中的最多点数
题意:
给你一个二维数组
points
和一个字符串s
,其中points[i]
表示第i
个点的坐标,s[i]
表示第i
个点的 标签 。如果一个正方形的中心在
(0, 0)
,所有边都平行于坐标轴,且正方形内 不 存在标签相同的两个点,那么我们称这个正方形是 合法 的。请你返回 合法 正方形中可以包含的 最多 点数。
注意:
- 如果一个点位于正方形的边上或者在边以内,则认为该点位于正方形内。
- 正方形的边长可以为零。
2024年8月4日
【leetcode】572. 另一棵树的子树
题意:
给你两棵二叉树
root
和subRoot
。检验root
中是否包含和subRoot
具有相同结构和节点值的子树。如果存在,返回true
;否则,返回false
。二叉树
tree
的一棵子树包括tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
2024年8月5日
【leetcode】600. 不含连续1的非负整数
题意:
给定一个正整数
n
,请你统计在[0, n]
范围的非负整数中,有多少个整数的二进制表示中不存在 连续的 1 。
2024年8月6日
【leetcode】321. 拼接最大数
题意:
给你两个整数数组
nums1
和nums2
,它们的长度分别为m
和n
。数组nums1
和nums2
分别代表两个数各位上的数字。同时你也会得到一个整数k
。请你利用这两个数组中的数字中创建一个长度为
k <= m + n
的最大数,在这个必须保留来自同一数组的数字的相对顺序。返回代表答案的长度为
k
的数组。
2024年8月7日
【leetcode】55. 跳跃游戏
题意:
给你一个非负整数数组
nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回
true
;否则,返回false
。
【leetcode】45. 跳跃游戏 II
题意:
给定一个长度为
n
的 0 索引整数数组nums
。初始位置为nums[0]
。每个元素
nums[i]
表示从索引i
向前跳转的最大长度。换句话说,如果你在nums[i]
处,你可以跳转到任意nums[i + j]
处:
0 <= j <= nums[i]
i + j < n
返回到达
nums[n - 1]
的最小跳跃次数。生成的测试用例可以到达nums[n - 1]
。
2024年8月8日
【leetcode】3131. 找出与数组相加的整数 I
题意:
给你两个长度相等的数组
nums1
和nums2
。数组
nums1
中的每个元素都与变量x
所表示的整数相加。如果x
为负数,则表现为元素值的减少。在与
x
相加后,nums1
和nums2
相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等 。返回整数
x
。
2024年8月9日
【leetcode】3132. 找出与数组相加的整数 II
题意:
给你两个整数数组
nums1
和nums2
。从
nums1
中移除两个元素,并且所有其他元素都与变量x
所表示的整数相加。如果x
为负数,则表现为元素值的减少。执行上述操作后,
nums1
和nums2
相等 。当两个数组中包含相同的整数,并且这些整数出现的频次相同时,两个数组 相等 。返回能够实现数组相等的 最小 整数
x
。
2024年8月10日
【leetcode】274. H 指数
题意:
给你一个整数数组
citations
,其中citations[i]
表示研究者的第i
篇论文被引用的次数。计算并返回该研究者的h
指数。根据维基百科上 h 指数的定义:
h
代表“高引用次数” ,一名科研人员的h
指数 是指他(她)至少发表了h
篇论文,并且 至少 有h
篇论文被引用次数大于等于h
。如果h
有多种可能的值,h
指数 是其中最大的那个。
2024年8月11日
【leetcode】1035. 不相交的线
题意:
在两条独立的水平线上按给定的顺序写下
nums1
和nums2
中的整数。现在,可以绘制一些连接两个数字
nums1[i]
和nums2[j]
的直线,这些直线需要同时满足:
nums1[i] == nums2[j]
- 且绘制的直线不与任何其他连线(非水平线)相交。
请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。
以这种方法绘制线条,并返回可以绘制的最大连线数。
2024年8月12日
【leetcode】20. 有效的括号
题意:
给定一个只包括
'('
,')'
,'{'
,'}'
,'['
,']'
的字符串s
,判断字符串是否有效。有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
2024年8月13日
【leetcode】3151. 特殊数组 I
题意:
如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。
Aging 有一个整数数组
nums
。如果nums
是一个 特殊数组 ,返回true
,否则返回false
。
2024年8月14日
【leetcode】3152. 特殊数组 II
题意:
如果数组的每一对相邻元素都是两个奇偶性不同的数字,则该数组被认为是一个 特殊数组 。
你有一个整数数组
nums
和一个二维整数矩阵queries
,对于queries[i] = [fromi, toi]
,请你帮助你检查子数组nums[fromi..toi]
是不是一个 特殊数组 。返回布尔数组
answer
,如果nums[fromi..toi]
是特殊数组,则answer[i]
为true
,否则,answer[i]
为false
。
2024年8月15日
【leetcode】3148. 矩阵中的最大得分
题意:
给你一个由 正整数 组成、大小为
m x n
的矩阵grid
。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格(不必相邻)。从值为c1
的单元格移动到值为c2
的单元格的得分为c2 - c1
。你可以从 任一 单元格开始,并且必须至少移动一次。
返回你能得到的 最大 总得分。
2024年8月16日
【leetcode】198. 打家劫舍
题意:
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。
2024年8月17日
【leetcode】10. 正则表达式匹配
题意:
给你一个字符串
s
和一个字符规律p
,请你来实现一个支持'.'
和'*'
的正则表达式匹配。
'.'
匹配任意单个字符'*'
匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串
s
的,而不是部分字符串。
【leetcode】44. 通配符匹配
题意:
给你一个输入字符串 (
s
) 和一个字符模式 (p
) ,请你实现一个支持'?'
和'*'
匹配规则的通配符匹配:
'?'
可以匹配任何单个字符。'*'
可以匹配任意字符序列(包括空字符序列)。判定匹配成功的充要条件是:字符模式必须能够 完全匹配 输入字符串(而不是部分匹配)。
2024年8月18日
【leetcode】551. 学生出勤记录 I
题意:
给你一个字符串
s
表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
'A'
:Absent,缺勤'L'
:Late,迟到'P'
:Present,到场如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
- 按 总出勤 计,学生缺勤(
'A'
)严格 少于两天。- 学生 不会 存在 连续 3 天或 连续 3 天以上的迟到(
'L'
)记录。如果学生可以获得出勤奖励,返回
true
;否则,返回false
。
【leetcode】1004. 最大连续1的个数 III
题意:
给定一个二进制数组
nums
和一个整数k
,如果可以翻转最多k
个0
,则返回 数组中连续1
的最大个数 。
【leetcode】1996. 游戏中弱角色的数量
题意:
你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组
properties
,其中properties[i] = [attacki, defensei]
表示游戏中第i
个角色的属性。如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色
i
弱于 存在的另一个角色j
,那么attackj > attacki
且defensej > defensei
。返回 弱角色 的数量。
2024年8月19日
【leetcode】552. 学生出勤记录 II
题意:
可以用字符串表示一个学生的出勤记录,其中的每个字符用来标记当天的出勤情况(缺勤、迟到、到场)。记录中只含下面三种字符:
'A'
:Absent,缺勤'L'
:Late,迟到'P'
:Present,到场如果学生能够 同时 满足下面两个条件,则可以获得出勤奖励:
- 按 总出勤 计,学生缺勤(
'A'
)严格 少于两天。- 学生 不会 存在 连续 3 天或 连续 3 天以上的迟到(
'L'
)记录。给你一个整数
n
,表示出勤记录的长度(次数)。请你返回记录长度为n
时,可能获得出勤奖励的记录情况 数量 。答案可能很大,所以返回对10^9 + 7
取余 的结果。
2024年8月20日
【leetcode】190. 颠倒二进制位
题意:
颠倒给定的 32 位无符号整数的二进制位。
2024年8月21日
【leetcode】300. 最长递增子序列
题意:
给你一个整数数组
nums
,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,
[3,6,2,7]
是数组[0,3,1,6,2,2,7]
的子序列。
2024年8月22日
【leetcode】1671. 得到山形数组的最少删除次数
题意:
我们定义
arr
是 山形数组 当且仅当它满足:
arr.length >= 3
- 存在某个下标
i
(从 0 开始) 满足0 < i < arr.length - 1
且:
arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
给你整数数组
nums
,请你返回将nums
变成 山形状数组 的 最少 删除次数。
2024年8月23日
【leetcode】380. O(1) 时间插入、删除和获取随机元素
题意:
实现
RandomizedSet
类:
RandomizedSet()
初始化RandomizedSet
对象bool insert(int val)
当元素val
不存在时,向集合中插入该项,并返回true
;否则,返回false
。bool remove(int val)
当元素val
存在时,从集合中移除该项,并返回true
;否则,返回false
。int getRandom()
随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有 相同的概率 被返回。你必须实现类的所有函数,并满足每个函数的 平均 时间复杂度为
O(1)
。
2024年8月24日
【leetcode】3146. 两个字符串的排列差
题意:
给你两个字符串
s
和t
,每个字符串中的字符都不重复,且t
是s
的一个排列。排列差 定义为
s
和t
中每个字符在两个字符串中位置的绝对差值之和。返回
s
和t
之间的 排列差 。
2024年8月25日
【leetcode】13. 罗马数字转整数
题意:
罗马数字包含以下七种字符:
I
,V
,X
,L
,C
,D
和M
。字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000
例如, 罗马数字
2
写做II
,即为两个并列的 1 。12
写做XII
,即为X
+II
。27
写做XXVII
, 即为XX
+V
+II
。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做
IIII
,而是IV
。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为IX
。这个特殊的规则只适用于以下六种情况:
I
可以放在V
(5) 和X
(10) 的左边,来表示 4 和 9。X
可以放在L
(50) 和C
(100) 的左边,来表示 40 和 90。C
可以放在D
(500) 和M
(1000) 的左边,来表示 400 和 900。给定一个罗马数字,将其转换成整数。
2024年8月26日
【leetcode】690. 员工的重要性
题意:
你有一个保存员工信息的数据结构,它包含了员工唯一的 id ,重要度和直系下属的 id 。
给定一个员工数组
employees
,其中:
employees[i].id
是第i
个员工的 ID。employees[i].importance
是第i
个员工的重要度。employees[i].subordinates
是第i
名员工的直接下属的 ID 列表。给定一个整数
id
表示一个员工的 ID,返回这个员工和他所有下属的重要度的 总和。
2024年8月27日
【leetcode】427. 建立四叉树
题意:
给你一个
n * n
矩阵grid
,矩阵由若干0
和1
组成。请你用四叉树表示该矩阵grid
。你需要返回能表示矩阵
grid
的 四叉树 的根结点。我们可以按以下步骤为二维区域构建四叉树:
- 如果当前网格的值相同(即,全为
0
或者全为1
),将isLeaf
设为 True ,将val
设为网格相应的值,并将四个子节点都设为 Null 然后停止。- 如果当前网格的值不同,将
isLeaf
设为 False, 将val
设为任意值,然后如下图所示,将当前网格划分为四个子网格。- 使用适当的子网格递归每个子节点。
2024年8月28日
【leetcode】104. 二叉树的最大深度
题意:
给定一个二叉树
root
,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
2024年8月29日
【leetcode】3142. 判断矩阵是否满足条件
题意:
给你一个大小为
m x n
的二维矩阵grid
。你需要判断每一个格子grid[i][j]
是否满足:
- 如果它下面的格子存在,那么它需要等于它下面的格子,也就是
grid[i][j] == grid[i + 1][j]
。- 如果它右边的格子存在,那么它需要不等于它右边的格子,也就是
grid[i][j] != grid[i][j + 1]
。如果 所有 格子都满足以上条件,那么返回
true
,否则返回false
。
2024年8月30日
【leetcode】3153. 所有数对中数位差之和
题意:
你有一个数组
nums
,它只包含 正 整数,所有正整数的数位长度都 相同 。两个整数的 数位差 指的是两个整数 相同 位置上不同数字的数目。
请你返回
nums
中 所有 整数对里,数位差之和。
2024年8月31日
【leetcode】3127. 构造相同颜色的正方形
题意:
给你一个二维
3 x 3
的矩阵grid
,每个格子都是一个字符,要么是'B'
,要么是'W'
。字符'W'
表示白色,字符'B'
表示黑色。你的任务是改变 至多一个 格子的颜色,使得矩阵中存在一个
2 x 2
颜色完全相同的正方形。如果可以得到一个相同颜色的
2 x 2
正方形,那么返回true
,否则返回false
。