
Leetcode错题集
文章平均质量分 79
仅收集有趣的题解,作为本人的错题集,不喜勿喷
NLP菜鸟
这个作者很懒,什么都没留下…
展开
-
LeetCode 2707-字符串中的额外字符
另外在实现动态规划时,可以使用记忆化搜索,也可以使用递推,这两种方式在时空复杂度方面没有明显差异。在图中,红点代表有一个以此节点为终点的单词。字典树(TrieTree)是一种树形结构,用于统计、排序和保存大量的字符串(但不仅限于字符串,如。一些额外的字符可能不属于任何子串,而题目要求最小化这些额外字符的数量。比如,我们要怎么用树存下单词"abc",“abb”,“bca”,"bc"呢?分割成若干个互不重叠的子串,同时要求每个字串都必须在。中的字符串翻转后插入字典树。的后缀是否存在,因此需要将。转载 2024-01-10 10:35:16 · 294 阅读 · 0 评论 -
LeetCode 2477-到达首都的最少油耗
为根节点的树,并且初始树上的每一个节点上都有一个人,现在所有人都需要通过「车子」向结点。移动,所以为了使这条边上的「车子」利用率最高,我们贪心的让。后再一起坐车向上移动,我们不妨设以节点。,统计全部边上汽油的开销即为最终答案。为根结点的子树上的人都需要通过边。,那么我们至少需要「车子」的数量为。:题目等价于给出了一颗以节点。的全部子节点上的人到了节点。往下进行「深度优先搜索」,那么我们可以通过从根结点。为根节点的子树大小为。为一辆车的给定座位数。转载 2023-12-05 13:37:58 · 257 阅读 · 0 评论 -
LeetCode 907-子数组的最小值之和
leetcode 907的错题笔记转载 2023-11-27 14:15:04 · 268 阅读 · 0 评论 -
LeetCode 2127-参加会议的最多员工数
如果我们把每个员工看成图上的一个节点,员工xxx喜欢员工yyy,就在从xxx对应的节点到yyy对应的节点连一条边,那么形成的图则会由若干棵基环内向树组成。所谓基环内向树从任意一个节点xxx开始在图上进行游走,由于每个员工只有一位喜欢的员工,因此每个节点在图上只有一条出边,即游走的过程是唯一的。由于图上有nnn个节点,因此在n1n+1n1步以内,一定会走到一个重复的节点,那么在第一次经过该节点之后,到第二次经过该节点之前的所有节点及该节点本身就组成了一个环,如上图蓝色节点所示。转载 2023-11-01 10:45:41 · 192 阅读 · 0 评论 -
LeetCode 2003-每棵子树内缺失的最小基因值
在从下往上走的过程中,由于上面的节点对应的子树一定包含下面的节点,所以下面节点的基因值集合一定是上面节点的基因值集合的子集。算法步骤寻找基因值为111的节点。若没有,则说明所有节点缺失的最小基因值均为111。若有,则以该节点为起始点。以该点为根节点,使用dfsdfsdfs向下搜索,将其子树包含的基因值记录到visvisvis数组中。依次遍历求其缺失的最小基因值。将该点的父节点设为根节点,使用dfsdfsdfs向下搜索其它子树的基因值,并更新visvisv。转载 2023-10-31 14:12:05 · 109 阅读 · 0 评论 -
LeetCode 1191-K次串联后最大子数组之和
表示以当前数组元素结尾的最大子数列和,转移过程也十分简单——要么就是只取当前元素,要么就是拖家带口把前一元素的。可以看出,这是一个常规性的子数组(蓝色)加上一个完整的原始数组。回到问题本身,由于数组可以重复出现,所以实际上,我们的子数组是可以跨过原始数组。是最大连续子数列和,所以结果有误,必须要考虑上结尾和开头结合的这种情况。算法,这样我们得到的结果一定涵盖了上面两种类型的子数组。:在一维数列中找到一个连续的子数列,使该子数列的和最大。由于我们想要最大子数列和,所以当前一个子数列和小于。转载 2023-10-19 12:08:50 · 163 阅读 · 0 评论 -
LeetCode 310-最小高度树
最直接的解法是,枚举以每个节点为根构成的树,然后求出该树的高度,所有树的最小高度即为答案,需要的时间复杂度为。方法一中使用广度优先搜索求出路径最长的节点与路径,我们还可以使用深度优先搜索来实现。由于树的高度由根节点到叶子节点之间的最大距离构成,假设树中距离最长的两个节点为。,由方法一可知最小树的根节点一定为该路径中的中间节点,我们尝试删除最外层的度为。,则可以推出以任意节点构成的树最小高度一定为。的距离,假设树中距离最长的两个节点为。,且最小高度的树的根节点一定在节点。的路径,然后找到根节点。转载 2023-10-08 15:26:22 · 160 阅读 · 0 评论 -
LeetCode 123-买卖股票的最佳时机III
同时,如果最优的情况对应的是恰好一笔交易,那么它也会因为我们在转移时允许在同一天买入并且卖出这一宽松的条件,从。无论题目中是否允许「在同一天买入并且卖出」这一操作,最终的答案都不会受到影响,这是因为这一操作带来的收益为零。天我们可以不进行任何操作,保持不变,也可以在只进行过一次买操作的前提下以。天我们可以不进行任何操作,保持不变,也可以在未进行任何操作的前提下以。在动态规划结束后,由于我们可以进行不超过两笔交易,因此最终的答案在。中,且为三者中的最大值。,并且在状态转移的过程中我们维护的是最大值,因此。转载 2023-10-05 20:37:19 · 100 阅读 · 0 评论 -
LeetCode 309-卖卖股票的最佳时机含冷冻期
121.买卖股票的最佳时机122.买卖股票的最佳时机 II123.买卖股票的最佳时机 III188.买卖股票的最佳时机 IV(本题)309.最佳买卖股票时机含冷冻期714.买卖股票的最佳时机含手续费剑指 Offer 63.股票的最大利润一种常用的方法是将买入和卖出买入为负收益,而卖出为正收益。在初入股市时,你只有买入的权利,只能获得负收益。而当你买入之后,你就有了卖出的权利,可以获得正收益。显然,我们需要尽可能地降低负收益而提高正收益,因此我们的目标总是将收益值最大化。转载 2023-10-05 19:21:42 · 93 阅读 · 0 评论 -
算法—差分数组
如果给你一个包含5000万个元素的数组,然后会有频繁区间修改操作,那什么是频繁的区间修改操作呢?比如让第1个数到第1000万个数每个数都加上1,而且这种操作时频繁的。转载 2023-10-05 15:03:07 · 62 阅读 · 0 评论 -
LeetCode 22-括号生成
可以通过跟踪目前放置的左括号和右括号的数目来做到这一点。我们只在序列仍然保持有效时才添加。数量,我们可以放一个。转载 2023-09-18 15:51:21 · 73 阅读 · 0 评论 -
LeetCode 1222-可以攻击国王的皇后
同一个方向的皇后可能有多个,我们需要选择距离国王最近的那一个,因此可以使用一个哈希映射,它的键表示某一个方向,值是一个二元组,分别表示当前距离最近的皇后以及对应的距离。当我们枚举到一个新的皇后时,如果它在国王的八个方向上,就与哈希映射中对应的值比较一下大小关系即可。我们枚举每个皇后,判断它是否在国王的八个方向上。我们可以依次枚举八个方向,并从国王出发,其遇到的第一个皇后就可以攻击它。为了记录皇后的位置,我们可以使用一个。的二维数组,也可以使用一个哈希表,这样就可以在。时,皇后可以攻击到国王,方向为。转载 2023-09-16 09:27:05 · 137 阅读 · 0 评论 -
LeetCode 207-课程表
本题是一道经典的「拓扑排序」问题。给定一个包含nnn个节点的有向图GGG对于图GGG的任意一条有向边uv(u,v)uvuuu在排列中都出现在vvv的前面。那么称该排列是图GGG的「拓扑排序」。根据上述定义,我们可以得出两个结论如果图GGG中存在环(即非有向无环图),那么图GGG不存在拓扑排序。如果图GGG是有向无环图,那么它的拓扑排序可能不止一种。我们将每一门课看成一个节点如果想要学习课程AAA之前必须完成课程BBB,那么我们从BBB到AAA。转载 2023-09-11 15:46:56 · 92 阅读 · 0 评论 -
leetcode 399-除法求值
在合并以后,产生了一棵高度为 3 的树,那么我们在执行查询的时候,例如下图展示的绿色结点和黄色结点,绿色结点并不直接指向根结点,在计算这两个变量的比值的时候,计算边的权值的比值得到的结果是不对的。因此可以用它们指向根结点的有向边的权值的比值作为两个变量的比值。中出现的变量就是图的顶点,「分子」与「分母」的比值可以表示成一个有向关系(因为「分子」和「分母」是有序的,不可以对换),并且这个图是一个带权图,由于有「路径压缩」的优化,两个在一个连通分量中的不同变量,它们分别到根节点的权值的比值就是要求的结果。原创 2023-08-09 14:23:19 · 329 阅读 · 0 评论 -
leetcode 42-接雨水
我们把每一个位置的左边最高高度记录在一个数组上(maxLeft),右边最高高度记录在一个数组上(maxRight),这样就避免了重复计算。一样的方法,只要从头遍历一遍所有的列,然后求出每一列雨水的体积,相加之后就是总雨水的体积了。首先,如果按照列来计算的话,宽度一定是1了,我们再把每一列的雨水的高度求出来就可以了。当前位置,左边的最高高度是前一个位置的左边最高高度和本高度的最大值。列4的雨水高度求出来了,宽度为1,相乘就是列4的雨水体积了。该列左侧最高的柱子和右侧最高的柱子中最矮的那个柱子的高度。原创 2023-07-04 14:54:39 · 466 阅读 · 0 评论 -
Leetcode 110-平衡二叉树
【代码】Leetcode 110-平衡二叉树。原创 2023-06-03 14:26:24 · 355 阅读 · 0 评论 -
leetcode-135.分发糖果
leetcode135.分发糖果原创 2023-05-29 16:16:38 · 127 阅读 · 0 评论 -
leetcode-42.连续子数组的最大和
1. 问题描述输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。leetcode 42.连续子数组的最大和2. 问题分析1. 动态规划假设 nums\textit{nums}nums 数组的长度是 nnn,下标从 0 到 n−1。我们用 f(i)f(i)f(i) 代表以第 iii 个数原创 2022-03-14 09:07:59 · 948 阅读 · 0 评论 -
leetcode-342. 4的幂
1. 问题描述leetcode 342. 4的幂2. 几种解法如果 n 是 4 的幂,那么 n 一定也是 2 的幂。因此我们可以首先判断 n 是否是 2 的幂,在此基础上再判断 n 是否是 4 的幂。判断 n 是否是 2 的幂可以参考。由于这一步的方法有很多种,在下面的题解中,我们使用 n & (n - 1) 这一方法进行判断。1. 二进制表示中1的位置算法思路:如果 n 是 4 的幂,那么 n 的二进制表示中有且仅有一个 1,并且这个 1 出现在从低位开始的第偶数个二进制位上(这是因原创 2022-02-17 14:21:52 · 7241 阅读 · 0 评论 -
leetcode-231. 2的幂
1. 题目描述2. 几种解法1. 二进制表示算法思想:一个数n是2的幂,当且仅当n是正整数,且n的二进制表示中仅包含1个1。因此,我们可以考虑使用位运算,将n的二进制表示中最低位的1移除,再判断剩余数值是否为0即可。代码实现bool isPowerOfTwo(int n) { return n > 0 && (n & (n - 1)) == 0; //return n > 0 && (n & (-n)) == n;}2.原创 2022-02-16 16:17:04 · 177 阅读 · 0 评论 -
leetcode-367. 有效的完全平方数
1. 问题描述leetcode 367.有效的完全平方数2. 三种妙解1. 二分查找算法思想:在暴力解的基础上,使用二分查找来优化搜索过程。由于numnumnum是正整数,所以若正整数xxx满足x×x=numx × x=numx×x=num,则xxx一定满足1≤x≤num1\le x\le num1≤x≤num。于是我们可以将1和numnumnum作为二分查找搜索区间的初始边界。代码bool isPerfectSquare(int num){ int low = 0, high = num;原创 2022-02-15 00:19:29 · 458 阅读 · 0 评论