2024年2月刷题记录
2024年2月2日
【leetcode】1686. 石子游戏 VI
题意:
Alice 和 Bob 轮流玩一个游戏,Alice 先手。
一堆石子里总共有
n
个石子,轮到某个玩家时,他可以 移出 一个石子并得到这个石子的价值。Alice 和 Bob 对石子价值有 不一样的的评判标准 。双方都知道对方的评判标准。给你两个长度为
n
的整数数组aliceValues
和bobValues
。aliceValues[i]
和bobValues[i]
分别表示 Alice 和 Bob 认为第i
个石子的价值。所有石子都被取完后,得分较高的人为胜者。如果两个玩家得分相同,那么为平局。两位玩家都会采用 最优策略 进行游戏。
请你推断游戏的结果,用如下的方式表示:
- 如果 Alice 赢,返回
1
。- 如果 Bob 赢,返回
-1
。- 如果游戏平局,返回
0
。
2024年2月3日
【leetcode】1690. 石子游戏 VII
题意:
石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 。
有
n
块石子排成一排。每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获得与该行中剩余石头值之 和 相等的得分。当没有石头可移除时,得分较高者获胜。鲍勃发现他总是输掉游戏(可怜的鲍勃,他总是输),所以他决定尽力 减小得分的差值 。爱丽丝的目标是最大限度地 扩大得分的差值 。
给你一个整数数组
stones
,其中stones[i]
表示 从左边开始 的第i
个石头的值,如果爱丽丝和鲍勃都 发挥出最佳水平 ,请返回他们 得分的差值 。
2024年2月4日
【leetcode】292. Nim 游戏
题意:
你和你的朋友,两个人一起玩 Nim 游戏:
- 桌子上有一堆石头。
- 你们轮流进行自己的回合, 你作为先手 。
- 每一回合,轮到的人拿掉 1 - 3 块石头。
- 拿掉最后一块石头的人就是获胜者。
假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为
n
的情况下赢得游戏。如果可以赢,返回true
;否则,返回false
。
2024年2月5日
【leetcode】1696. 跳跃游戏 VI
题意:
给你一个下标从 0 开始的整数数组
nums
和一个整数k
。一开始你在下标
0
处。每一步,你最多可以往前跳k
步,但你不能跳出数组的边界。也就是说,你可以从下标i
跳到[i + 1, min(n - 1, i + k)]
包含 两个端点的任意位置。你的目标是到达数组最后一个位置(下标为
n - 1
),你的 得分 为经过的所有数字之和。请你返回你能得到的 最大得分 。
2024年2月6日
【leetcode】LCP 30. 魔塔游戏
题意:
小扣当前位于魔塔游戏第一层,共有
N
个房间,编号为0 ~ N-1
。每个房间的补血道具/怪物对于血量影响记于数组nums
,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造成伤害值,即血量减少对应数值;0
表示房间对血量无影响。小扣初始血量为 1,且无上限。假定小扣原计划按房间编号升序访问所有房间补血/打怪,为保证血量始终为正值,小扣需对房间访问顺序进行调整,每次仅能将一个怪物房间(负数的房间)调整至访问顺序末尾。请返回小扣最少需要调整几次,才能顺利访问所有房间。若调整顺序也无法访问完全部房间,请返回 -1。
2024年2月7日
【leetcode】2641. 二叉树的堂兄弟节点 II
题意:
给你一棵二叉树的根
root
,请你将每个节点的值替换成该节点的所有 堂兄弟节点值的和 。如果两个节点在树中有相同的深度且它们的父节点不同,那么它们互为 堂兄弟 。
请你返回修改值之后,树的根
root
。注意,一个节点的深度指的是从树根节点到这个节点经过的边数。
2024年2月8日
【leetcode】993. 二叉树的堂兄弟节点
题意:
在二叉树中,根节点位于深度
0
处,每个深度为k
的节点的子节点位于深度k+1
处。如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点
root
,以及树中两个不同节点的值x
和y
。只有与值
x
和y
对应的节点是堂兄弟节点时,才返回true
。否则,返回false
。
2024年2月9日
【leetcode】236. 二叉树的最近公共祖先
题意:
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
2024年2月10日
【leetcode】94. 二叉树的中序遍历
题意:
给定一个二叉树的根节点
root
,返回 它的 中序 遍历 。
2024年2月11日
【leetcode】144. 二叉树的前序遍历
题意:
给你二叉树的根节点
root
,返回它节点值的 前序 遍历。
2024年2月12日
【leetcode】145. 二叉树的后序遍历
题意:
给你一棵二叉树的根节点
root
,返回其节点值的 后序遍历 。
2024年2月13日
【leetcode】987. 二叉树的垂序遍历
题意:
给你二叉树的根结点
root
,请你设计算法计算二叉树的 垂序遍历 序列。对位于
(row, col)
的每个结点而言,其左右子结点分别位于(row + 1, col - 1)
和(row + 1, col + 1)
。树的根结点位于(0, 0)
。二叉树的 垂序遍历 从最左边的列开始直到最右边的列结束,按列索引每一列上的所有结点,形成一个按出现位置从上到下排序的有序列表。如果同行同列上有多个结点,则按结点的值从小到大进行排序。
返回二叉树的 垂序遍历 序列。
2024年2月14日
【leetcode】102. 二叉树的层序遍历
题意:
给你二叉树的根节点
root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
2024年2月15日
【leetcode】107. 二叉树的层序遍历 II
题意:
给你二叉树的根节点
root
,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
2024年2月16日
【leetcode】103. 二叉树的锯齿形层序遍历
题意:
给你二叉树的根节点
root
,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
2024年2月17日
【leetcode】429. N 叉树的层序遍历
题意:
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
2024年2月18日
【leetcode】589. N 叉树的前序遍历
题意:
给定一个 n 叉树的根节点
root
,返回 其节点值的 前序遍历 。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值
null
分隔(请参见示例)。
2024年2月19日
【leetcode】590. N 叉树的后序遍历
题意:
给定一个 n 叉树的根节点
root
,返回 其节点值的 后序遍历 。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值
null
分隔(请参见示例)。
2024年2月20日
【leetcode】105. 从前序与中序遍历序列构造二叉树
题意:
给定两个整数数组
preorder
和inorder
,其中preorder
是二叉树的先序遍历,inorder
是同一棵树的中序遍历,请构造二叉树并返回其根节点。
2024年2月21日
【leetcode】106. 从中序与后序遍历序列构造二叉树
题意:
给定两个整数数组
inorder
和postorder
,其中inorder
是二叉树的中序遍历,postorder
是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。
2024年2月22日
【leetcode】889. 根据前序和后序遍历构造二叉树
题意:
给定两个整数数组,
preorder
和postorder
,其中preorder
是一个具有 无重复 值的二叉树的前序遍历,postorder
是同一棵树的后序遍历,重构并返回二叉树。如果存在多个答案,您可以返回其中 任何 一个。
2024年2月23日
【leetcode】2583. 二叉树中的第 K 大层和
题意:
给你一棵二叉树的根节点
root
和一个正整数k
。树中的 层和 是指 同一层 上节点值的总和。
返回树中第
k
大的层和(不一定不同)。如果树少于k
层,则返回-1
。注意,如果两个节点与根节点的距离相同,则认为它们在同一层。
2024年2月24日
【leetcode】2476. 二叉搜索树最近节点查询
题意:
给你一个 二叉搜索树 的根节点
root
,和一个由正整数组成、长度为n
的数组queries
。请你找出一个长度为
n
的 二维 答案数组answer
,其中answer[i] = [mini, maxi]
:
mini
是树中小于等于queries[i]
的 最大值 。如果不存在这样的值,则使用-1
代替。maxi
是树中大于等于queries[i]
的 最小值 。如果不存在这样的值,则使用-1
代替。返回数组
answer
。
2024年2月25日
【leetcode】235. 二叉搜索树的最近公共祖先
题意:
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
2024年2月26日
【leetcode】938. 二叉搜索树的范围和
题意:
给定二叉搜索树的根结点
root
,返回值位于范围[low, high]
之间的所有结点的值的和。
2024年2月28日
【leetcode】2673. 使二叉树所有路径值相等的最小代价
题意:
给你一个整数
n
表示一棵 满二叉树 里面节点的数目,节点编号从1
到n
。根节点编号为1
,树中每个非叶子节点i
都有两个孩子,分别是左孩子2 * i
和右孩子2 * i + 1
。树中每个节点都有一个值,用下标从 0 开始、长度为
n
的整数数组cost
表示,其中cost[i]
是第i + 1
个节点的值。每次操作,你可以将树中 任意 节点的值 增加1
。你可以执行操作 任意 次。你的目标是让根到每一个 叶子结点 的路径值相等。请你返回 最少 需要执行增加操作多少次。
注意:
- 满二叉树 指的是一棵树,它满足树中除了叶子节点外每个节点都恰好有 2 个子节点,且所有叶子节点距离根节点距离相同。
- 路径值 指的是路径上所有节点的值之和。