力扣
文章平均质量分 79
力扣题
Yorelee.
这个作者很懒,什么都没留下…
展开
-
力扣 | 递归 | 区间上的动态规划 | 486. 预测赢家
因此对于玩家2的选择,如果存在一个选择使得玩家1输,那么该情况下玩家1都不能胜利(只要玩家2选择让自己赢的情况,那么玩家1就不能赢了)。但这个逻辑感觉存在一定问题,因为玩家1先手,玩家1想要自己的效益最大,这个时候玩家2的效益是跟玩家1的选择有关的,因为棋局完全根据玩家1来决定。注意到这里是从大的数组中选择,让数组依次减小,我们也可以从数组小的开始转移到大数组,因为当小数组确定时,大数组也能确定。简化逻辑:玩家1先手,那么玩家1效益最大,玩家2应该效益要最低。先手时,玩家1的分数;注意到本题数据范围为。原创 2024-09-06 12:02:00 · 1161 阅读 · 0 评论 -
力扣 | 最长公共子序列 | 动态规划 | 最长公共子序列长度、最长公共子序列
(我们不知道哪个回文中心最好使)原创 2024-08-23 20:07:50 · 1396 阅读 · 0 评论 -
力扣 | 子数组滑动窗口 | 560. 和为 K 的子数组、209. 长度最小的子数组、862. 和至少为 K的最短子数组、220. 存在重复元素 III
下面的题并不是全都由滑动窗口解决,有的题可以,有的题不可以,放入滑动窗口栏目的原因是,这些容易混淆。原创 2024-08-21 07:59:38 · 903 阅读 · 2 评论 -
力扣 | 背包dp | 279. 完全平方数、518. 零钱兑换 II、474. 一和零、377. 组合总和 Ⅳ
这个目标就是我们定义的状态、这个物品就是我们要规定什么时候能包含的、这个背包就是总的容量比如这个完全平方数,我们要定义的状态是和为。原创 2024-08-21 05:51:26 · 951 阅读 · 0 评论 -
力扣 | 一维简单线性dp | 2140. 解决智力问题、322. 零钱兑换、2466. 统计构造好字符串的方案数、91. 解码方法、983. 最低票价、790. 多米诺和托米诺平铺
需要特别注意的题目有2140. 解决智力问题和983. 最低票价,因为这两个题目可以启发思路,其他的题都比较普通。原创 2024-08-16 00:19:08 · 1017 阅读 · 0 评论 -
力扣 | 动态规划 | 动态规划在树的应用
这个题和之前的唯一区别就是这里维护一个真实的数,而不仅仅是个数。我们仍然可以使用相同的方法,只是这里是创建树,并且要关注值。,即枚举左右子树的所有情况,个数的乘积就是这种情况的个数。就是对的最高金额,通过状态转移就能保证,每个都是最高金额。的二叉搜索树的种树。(其实和记忆化搜索+dfs差不多),从只关注个数到需要创建所有情况。很明显这是一个动态规划题,树形dp,如何定义?一定是需要的,因为这代表左子树的个数,而。表示的是左子树的所有可能情况。并且我们需要特别注意,表示空树,空树并不是。为根的树的最高金额?原创 2024-08-14 16:34:53 · 638 阅读 · 0 评论 -
力扣 | 动态规划 | 状态机 | 买卖股票 | 买卖股票的最佳时机
本质上这种属于动态规划题目但又有多种状态的,我们只需要正确定义出状态即可。可能每个人定义的状态不一样,但只要是对的就行。原创 2024-08-14 10:48:34 · 994 阅读 · 0 评论 -
力扣 | 递增子序列 | 动态规划 | 最长递增子序列、最长递增子序列的个数、及其变式
原序-递增数值问题:原序-定差数值问题:非原序-递增区间问题:非原序-递增二维数值问题。原创 2024-08-10 19:35:28 · 1058 阅读 · 0 评论 -
力扣 | 动态规划 | 在字符串的应用 | 最长回文子串、最长回文子序列、单词拆分、编辑距离
在解答字符串动态规划的应用时,我们需要非常注意一个问题: 有时候我们定义dp[i][j]dp[i][j]dp[i][j]表示第一个字符串的第个字符,第二个字符串的第个字符。dp[0][0]dp[0][0]dp[0][0]表示两个都为空串时。 使用数组下标访问时,应该这样访问第一个字符串的第个字符: 总的来说的定义可能和数组访问下标不一样。我们还需要这样思考:为什么要使用动态规划?不使用其他方法?为什么动态规划可以解决?LeetCode:5.最长回文子串一个回文串str[i][j]str[i原创 2024-08-10 18:46:44 · 914 阅读 · 0 评论 -
图论:1857. 有向图中最大颜色值(拓扑排序+动态规划)
本题乍一看和求所有路径中的最长路径没啥区别,直接暴力枚举所有路径,但是时间复杂度不允许我们这样做。原创 2024-08-04 13:27:21 · 1280 阅读 · 0 评论 -
dp:221. 最大正方形
我们用数组存以该点为右下角,左下角,左上角,右上角的最大正方形,可以通过周围的转移,然后求出以它为“中心”构成的最大正方形。但是可以很容易发现,如果求以一个点为角 构成的最大正方形,可以通过其他周围的点作为角来快速找到这个点的最大正方形。但是实际上,以该点为右下角就足以解决这个问题,以一个点为中点进行遍历,需要的时间复杂度为。貌似很难,即使知道是一个。看到这个题目真能立马想到。原创 2024-08-01 14:27:33 · 322 阅读 · 0 评论 -
图论:839. 相似字符串组(等价类问题—并查集)
使用并查集,可以快速合并多个等价类(不管这个等价类是什么形式,我们最终都可以映射到整数上,使用并查集);并且并查集不要误入一个误区,用并查集思路去思考问题,直接将并查集当作维护等价类和合并等价类的数据结构就行,抽象地思考。原因在于,这里实现的并查集中,父亲一定指向自己,儿子一定不指向自己,一个父亲代表一个等价类。中,我们使用一定要使用并查集,是因为这里面可能涉及到多个等价类合并的问题。的话,多个等价类合并的速度不高,而使用并查集等价类合并的速度是。和它们两个都相似,因此它们三个相似,应当将其都合并,使用。原创 2024-08-01 12:41:44 · 1325 阅读 · 0 评论 -
字符串并查集:1061. 按字典序排列最小的等效字符串和990. 等式方程的可满足性
我们按问题来看并不要按秩合并,因为最终我们需要找到字典序最小的等价字符串,我们只需要让每一个字符找到最小的等价字符即可(因为是按一个字符等价的)。之间存在一条边,由于这是一个等价关系具有传递性,因此一个连通分量中的所有字符都是等价的。小的作为父亲,这样也可以迅速找倒字典序最小的等价字符。因此,我们第一遍构造等价关系;第二遍进行判断即可。并查集使用整数,字符自然和整数有一个映射,如果将每个字符当做图中的一个顶点,则有。不能在第一次遍历的时候就进行判断,因为。这里和之前不同的是,原创 2024-07-31 20:26:08 · 416 阅读 · 0 评论 -
图论:721. 账户合并(并查集扩展)
它的思想为,一开始将不同单元单独作为一个结点,然后按等价条件进行合并,这个合并比单独使用集合合并快很多(因为单独使用集合这个数据结构,集合不能被真正合并,而且你需要快速找到是哪个集合,合并速度也没有并查集快)。当我们将这些邮箱合并后,由于还是整数集合,我们再将其转化为字符串集合即可。再通过账户来看它的邮箱属于哪个等价类,来确定它的邮箱有哪些,确定过的账户,等价类标记为。我们使用哈希表将邮箱编号,之后按账户邮箱进行并查集合并,我们知道一个账户的邮箱是只能属于同一个用户,这些属于同一个用户的邮箱是完全等价的。原创 2024-07-30 12:57:41 · 831 阅读 · 0 评论 -
图论:1615. 最大网络秩(贪心,非完全图一定存在两个点之间没有边)
在不考虑两座道路直接相连时,我们求出入度(或出度)最大的两个点即可。若相连,则存在一条边,所以我们将边存入一个集合中,快速查找是否存在。原创 2024-07-28 10:53:23 · 779 阅读 · 0 评论 -
图论:1557. 可以到达所有点的最少点数目(问题转化)
找到最小的点集使得从这些点出发能到达图中所有点,我们可以发现,入度为0的点,必然在答案当中,因为没有点能够到达该点,所以必须将其放入答案中。但是这些点就能满足所有要求吗?即一个入度不为0的点一定能由一个入度为0的点遍历到?题目中说,保证解存在且唯一,如果有单独成环的情况,解是不唯一的,因为。中的每一个结点都能到达环中的所有点。所以题目中不存在单独成环的情况。原创 2024-07-26 11:09:28 · 310 阅读 · 0 评论 -
力扣:1658. 将 x 减到 0 的最小操作数(问题转换为最长正整数数组滑动窗口,前/后缀和+哈希)
这个题目当纯去思考,容易陷入这样一个误区即一步一步删除,保证每一步都删除正确的元素。但是仔细思考会发现,对于一个答案而言,它一定是删除了一个前缀和一个后缀(或其中一个)来构成的。与你删除这个元素的次序无关,也就是说,一个元素如果要被删除,那么删除它的次序不产生影响。如果思考到这一点,那么问题就变得简单了。我的一个直观的做法是:先求后缀和,然后从前往后遍历求出前缀和,并且这个过程中由于是正整数组我们可以使用得到想要的答案的位置即后缀和等于x−presum的位置,有且只有一个。原创 2024-07-28 18:45:57 · 309 阅读 · 0 评论 -
力扣hot100:(The Last one)287. 寻找重复数(快慢指针,静态链表)
如果存在重复整数,则有多个元素的后继指向同一个位置。对于其他元素而言,它们的后继互不相同,因此可以构成一条静态链。的值均在数组下标之内,因此我们可以将元素的值当作数组下标,即当作。),可知至少存在一个重复的整数。号元素当作链表头,其指向是。不懂技巧,那就暴力!原创 2024-06-21 12:04:56 · 861 阅读 · 0 评论 -
力扣hot100:31. 下一个排列
我们会发现,我们只需要将右边较大的一个数与前面较小的一个数交换就能变得更大,不过为了更小我们需要将交换后的后面部分从小到大排序。我们考虑极端情况,如。,比它更大一点的将是。原创 2024-06-15 15:04:16 · 525 阅读 · 0 评论 -
力扣hot100:75. 颜色分类(双指针)
本题是经典的「」,由计算机科学家 Edsger W. Dijkstra 首先提出。原创 2024-06-15 13:10:25 · 637 阅读 · 0 评论 -
力扣hot100: 48. 旋转图像
受到的启发,我们可以对旋转图像按层旋转,我们只需要记录四个顶点,并且本题是一个方阵,四个顶点就能完成图像的旋转操作。原创 2024-06-10 10:08:39 · 402 阅读 · 0 评论 -
力扣hot100:739. 每日温度/54. 螺旋矩阵
如果我们记住四个顶点,则我们就有足够信息可以使得我们无差错的转一圈。并且转完这一圈,四个顶点更新为内层的四个顶点是非常简单的。,我们可以直接按螺旋顺序遍历螺旋矩阵,然后在原矩阵中直接标记被遍历的位置。矩阵,从外到内分层,则有每次都是转一圈。如果需要原地进行,空间复杂度且需要是。经典单调栈问题,求下一个更大的数。,则需要进行层序遍历。原创 2024-06-09 11:52:47 · 1470 阅读 · 0 评论 -
力扣hot100:394. 字符串解码(递归/括号匹配,字符串之间相对顺序)
本题容易想到用递归处理,在写递归时主要是需要明确自己的递归函数的定义。不过我们也可以利用括号匹配的方式使用栈进行处理。原创 2024-06-08 15:07:32 · 727 阅读 · 0 评论 -
力扣hot100:155. 最小栈(栈,辅助栈存储相关信息)
我是夜空,你是星河,终于完整了,当有你来唱和原创 2024-06-08 11:45:57 · 1198 阅读 · 1 评论 -
力扣hot100:295. 数据流的中位数(两个优先队列维护中位数)
这个题目最快的解法应该是维护中位数,每插入一个数都能快速得到一个中位数。根据数据范围,我们应当实现一个Onlogn的算法。原创 2024-06-07 18:36:36 · 647 阅读 · 0 评论 -
力扣hot100:138. 随机链表的复制(技巧,数据结构)
这是一个经典的数据结构题,当做数据结构来学习。原创 2024-06-05 22:38:08 · 1774 阅读 · 0 评论 -
力扣hot100:25. K 个一组翻转链表
我们直接遍历一次,来记录结点总数,然后记录当前使用了多少节点,两数相减就是剩余的节点数量。个结点进行一次翻转,使用迭代的方式也是可以的,使用递归只是更好实现而已。个结点一组时就不太好使了,我们可以采用递归的方式,然后每一组内部使用。中我们使用递归来实现这个问题是很方便的,使用迭代在。为了避免重复遍历结点判断剩余节点个数是否大于等于。原创 2024-06-05 21:24:30 · 228 阅读 · 0 评论 -
力扣hot100:24. 两两交换链表中的节点
这就是递归的好处,你定义这个函数是这样一个功能,然后你就可以直接使用已经处理好的子部分了,并保证你的函数实现满足你定义的语义即可。这题使用递归的方法,将前两个结点当做一个整体,递归认为将第三个结点之后的所有结点已经进行了两两交换,然后再连起来就行。如果是递归大佬应该是很容易想到这个题的,因为这题两两组队很容易进行子部分划分。如果直接做的话,用两个结点依次往后执行即可,确保建立正确的连接。原创 2024-05-30 11:00:00 · 361 阅读 · 0 评论 -
力扣hot100:23. 合并 K 个升序链表
这题非常容易想到归并排序的思路,俩升序序列合并,可以使用归并的方法。不过这里显然是一个多路归并排序;包含多个子数组的归并算法,这可以让我们拓展归并算法的思路。原创 2024-05-29 12:45:00 · 1786 阅读 · 0 评论 -
力扣hot100:146. LRU 缓存
我们需要维护一个时间的长短,以便于取出离现在最长的时间,这个时间比较容易实现,我们维护一个time表示当前时间,从0开始,然后在使用的一些关键字里面,当一个关键字使用的时间越小,那么它越久未被使用,我们只需要维护一个关键字使用的最小值就行,并且还需要有更新操作。,因此我们可以只使用一个哈希表,来同时维护这两个信息。来查询的,而查询只需要判断。听说华为实习笔试考了这题。由于结点和值都是通过。原创 2024-05-27 12:37:08 · 1136 阅读 · 0 评论 -
力扣:503. 下一个更大元素 II(单调栈)
是很典型的单调栈的模板题。循环数组,只需要将原始数组拉长一倍即可。原创 2024-05-18 11:00:00 · 218 阅读 · 0 评论 -
力扣:654. 最大二叉树(单调栈)
本质上,我们考虑到,在单调栈中,我们就可以找到所有结点的儿子(或确定所有结点的父亲),因此我们需要思考,是否存在一种方法直接在单调栈运行过程中找到所有儿子?单调栈的方法不容易一次性想到,不过仔细思考我们可以观察到这样一个事实,也是。我们理解了这一个过程,相信读者就更容易思考了。内,选出最大值,递归构建结点即可。下面,我们将使用数字值代表树节点。递归的方法很容易实现,给定函数。转载 2024-05-17 15:40:01 · 896 阅读 · 0 评论 -
数据结构:二叉树的序列化和反序列化(序列和二叉树结构一一对应)
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。原创 2024-05-16 14:02:04 · 1595 阅读 · 0 评论 -
LeetCode:116.填充每个节点的下一个右侧节点指针
题目:分析题意容易关注到只需要将每层结点连接起来,因此我们只需要把每层结点求出来即可,即使用层次遍历。转载 2024-05-11 11:00:24 · 556 阅读 · 0 评论 -
力扣hot100:199. 二叉树的右视图/437. 路径总和 III(dfs/回溯/树上前缀和/哈希表)
前缀和的方法如果之前接触过应该很容易想到,不过这里需要学习深度优先遍历的方法,更深入理解dfs。我们真的是需要哈希表找到需要的值吗?在这里我们只需要之前有多少个这样的值就行了!这个问题使用dfs可以解决,不过实现起来比较复杂,时间复杂度是。右视图实际上只需要找到,每一层的最右边的那个结点即可。之后很容易想到使用哈希表直接查找使用存在所需要的值。发现使用树上前缀和很容易解决,最坏时间复杂度也是。差点因为是个中等题打退堂鼓。,所以我们先考虑使用前缀和。我们先考虑其他方法。原创 2024-05-05 18:09:24 · 1333 阅读 · 0 评论 -
力扣hot100:543. 二叉树的直径/108. 将有序数组转换为二叉搜索树
二叉树的直径 = 二叉树的是指树中任意两个节点之间最长路径的。遇到二叉树的问题很容易去直接用求解的目标去定义递归函数。但是仔细考虑,返回树的直径并不能向上传播。因此我们只需要求高度就行。树求高度实际上是一个树形dp。原创 2024-05-04 16:24:12 · 548 阅读 · 0 评论 -
力扣hot100:101. 对称二叉树(双指针以不同方式递归)
看了第一个样例,很容易直接层序遍历看每一层的前后是否相同。但接下来这个样例告诉你,不能这样做。原创 2024-05-03 18:00:00 · 441 阅读 · 0 评论 -
力扣hot100:136. 只出现一次的数字 及其衍生
的特点是,除了一个元素只出现一次,其他元素出现两次。我们用异或的方法很容易去掉出现两次的元素!两个相同的数异或就消掉了~原创 2024-04-17 22:45:17 · 255 阅读 · 0 评论 -
数据结构:链表的双指针技巧
链表的技巧原创 2024-03-30 21:00:04 · 1165 阅读 · 0 评论 -
数据结构:差分数组
它常用于数组和列表数据结构中,可以让区间修改的操作时间复杂度降低到O(1),查询操作的时间复杂度为O(n)。差分数组最大的优势在于能够非常高效地对原始数组的连续区间进行增减操作。在处理大量区间增减值的问题时,差分数组能够大幅度减少计算量,尤其是在数据量大、修改操作频繁的情况下。看完本篇文章对差分的阐述,看到这题很容易想到差分,因为是频繁对区间的修改。差分数组是处理数组区间修改问题的强大工具,它通过巧妙地利用差分的思想,使得区间操作变得简单高效。中的某个元素值,或者得到修改后的数组,我们需要对差分数组。原创 2024-03-30 08:00:00 · 562 阅读 · 0 评论