LeetCode的秃头之路
文章平均质量分 83
闲聊一些LeetCode解题过程,记录LeetCode折磨我的心酸血泪史~
神经骚栋
IT界无底坑洞栋主
展开
-
2487. 从链表中移除节点
言归正传, 对于这个题目, 我们应该尝试使用栈的方式, 在遍历链表的过程中, 我们需要用栈的形式存储每一个链表节点, 并且为了方便后期的组装, 我们可以尝试双向队列来代替链表, 以便于后边后期从栈底取出元素.那么什么时候触发删除操作呢?如果当前节点的值比上一个节点的值大时, 也就是题意中的。, 我们就从双向队列的栈顶依次取值, 直到不满足栈顶的值不大于当前节点的值.然后就是利用双向队列来重组链表了, 我们需要依次从栈底抛出节点然后组装链表.每日一题 2024.01.03。给你一个链表的头节点。原创 2024-01-04 09:49:29 · 925 阅读 · 0 评论 -
746. 使用最小花费爬楼梯
两层有关, 所以我们不需要设定dp数组, 只需要创建两个int变量即可. 并且设定其初始值.个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。爬楼梯是典型的动态规划问题, 这个题目要求上楼梯的最小花费, 那么能到当前第。层的楼梯的最小花费如下所示, 这也是当前题的状态转移方程.那么, 我们看一下整体的题解过程, 由于最终上楼花费只与。那么接下来, 我们就看一下整体的题解过程.请你计算并返回达到楼梯顶部的最低花费。取较小值即为题目的题解.层的楼梯只有两种方式.原创 2023-12-21 09:51:11 · 489 阅读 · 0 评论 -
2828. 判别首字母缩略词
这个题目没有任何思路, 直接暴力求解即可, 为了防止过度进入循环遍历, 我们可以尝试先添加边界条件.然后就是遍历数组, 判断每一个字符串的首字母是否满足题意即可.那么接下来, 我们就看一下整体的题解过程.中每个字符串的第一个字符形成字符串。首先添加两者的长度是否相同的边界条件.每日一题 2023.12.20。的首字母缩略词,返回。的 首字母缩略词。原创 2023-12-20 17:56:17 · 513 阅读 · 0 评论 -
2697. 字典序最小回文串
好久没更新了, 换工作加上搬家时间上就比较紧张了, 这次继续我们的做题之旅, 先从简单题目题目做起, 我直接重拳出击.的问题, 当我们遇到了两个不相同的字母, 我们直接用减法比较两者的大小, 然后替换字典序较大的字母即可.,你可以对其执行一些操作。这个题目直接重拳出击了, 然后使用双指针, 从两头往中间遍历, 对于。中对应字母在字母表中出现顺序更早,则认为。那么接下来, 我们就看一下整体的题解过程.出现不同的第一个位置,如果该位置上。每日一题 2023.12.13。请你执行 尽可能少的操作 ,使。原创 2023-12-13 17:06:22 · 853 阅读 · 0 评论 -
2609. 最长平衡子字符串
当然了, 在遍历完成之后, 最后一个子串肯定没法在循环中判断, 我们直接在外部再进行一次判断即可., 就要停止了, 这时候判断子串的长度. 输出到最终结果中, 同时这时候也是新一轮的开始.这个题其实我们只需要知道, 什么时候启动下一个子串什么时候比较最终结果就好.为了满足题意, 停止条件只会有一个, 那就是前面有 n 个。数量较少的个数乘以2就是平衡子字符串的长度.满足了条件停止了, 所以, 我们得到了。子字符串是字符串中的一个连续字符序列。然后, 我们进行遍历, 先判断当前是。中最长的平衡子字符串长度。原创 2023-11-08 18:57:35 · 261 阅读 · 0 评论 -
2586. 统计范围内的元音字符串数
如果字符串以元音字母开头并以元音字母结尾,那么该字符串就是一个。中判断, 但我看到的测试用例不都这个范围吗?那么就简单了, 我们创建一个方法来判断某个字母是否是元音字母.说的是每一个单词的情况, 也就是每一个单词的情况从。这个题这么简单我都能做错…那么接下来, 我们就看一下整体的题解过程.区间说的是整个words数组的情况.每日一题 2023.11.07。数组, 找出符合题意的单词即可.是元音字符串的数目,其中。原创 2023-11-07 10:28:19 · 209 阅读 · 0 评论 -
318. 最大单词长度乘积
首先外层的查找遍历过程基本上没法进行优化了, 那么我们只能优化比对过程的遍历. 这时候, 我觉得觉得要使用位运算来解决了, 当然了, 这算是自己的经验吧. 没接触过位运算的童鞋还是比较难想到的.对任意两个单词生成的字母情况整型数进行计算, 如果结果等于0, 那就说明没有重复位. 没有重复位也就说没有重复字母, 符合题意. 逻辑代码如下所示.按照上面的这个思路的话, 我们可以得到每一个单词的字母情况, 并且为了方便下一步查找, 我们把它们存储到一个字典中去., 那么会遍历这个单词, 生成如下的步骤.原创 2023-11-06 17:19:27 · 251 阅读 · 0 评论 -
117. 填充每个节点的下一个右侧节点指针 II
这个题目实际上就是层序遍历的变形题, 我们在层序遍历的过程, 根据具体情况添加。当然了, 有一些边界条件需要处理, 比如当前二叉树为空, 直接返回空即可.指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将。使用递归解题也符合要求,本题中递归程序的隐式栈空间不计入额外空间复杂度。接下来, 我们就看一下整体的题解过程.然后, 我们正常的进行层序遍历即可.每日一题 2023.11.03。再比如每一层的最后一个节点的。你只能使用常量级额外空间。原创 2023-11-04 11:56:55 · 205 阅读 · 0 评论 -
2103. 环和杆
这个题目非常简单, 我们只需要通过HashMap记录每一根柱子上的颜色即可. 由于颜色色值可能重复, 所以我们使用 HashSet 作为Value. 利用它进行去重.当某一个柱子的颜色添加完当前的色值之后, Set的元素个数变成3个之后, 我们对结果数值进行。个环,环的颜色可以是红、绿、蓝中的一种。那么接下来, 我们就看一下整体的题解过程.每日一题 2023.11.02。环的杆,并返回这种杆的数量。的杆上,绿色的环在编号为。的杆上,蓝色的环在编号为。个环,红色的环在编号为。中每两个字符形成一个。原创 2023-11-02 13:39:19 · 130 阅读 · 0 评论 -
275. H 指数 II
昨天我们已经做了这个题目了, 但是今天添加了一个条件, 那就是数组已经排序了, 这时候, 我们直接二分法就好了.代表“高引用次数”(high citations),一名科研人员的。请你设计并实现对数时间复杂度的算法解决此问题。下面让我们一起看看整体的题解过程吧.每日一题 2023.10.30。今天没状态, 直接抄官方题解了.计算并返回该研究者的。指数是指他(她)的 (篇论文被引用的次数,原创 2023-10-30 23:18:02 · 96 阅读 · 0 评论 -
274. H 指数
首先, 我们先对数组进行排序. 这是从经验出发的, 因为涉及到比较大小的问题, 我们排序之后的数组更加容易找到边界.我们想要找到题目的题解, 我们就一定需要找到其中的规律, 核心就是有。比后面的元素个数还要多, 就是我们要找到的最大的。如果查找一遍发现没有任何符合题意的结果, 直接返回。篇论文被引用的次数。计算并返回该研究者的。代表“高引用次数” ,一名科研人员的。下面让我们一起看看整体的题解过程吧.每日一题 2023.10.29。然后, 我们需要遍历数组, 当。次. 从中找一个最大的。原创 2023-10-29 22:23:25 · 181 阅读 · 0 评论 -
2558. 从数量最多的堆取走礼物
次, 每次都取优先队列中第一个数字, 平方根完成之后, 再次插入到优先队列中. 通过计算我们就能知道还拿走了多少, 通过总数减去拿走的礼物数量就是题目的题解了.这个题目不说了, 做了三个月的题目之后就知道有优先队列这个概念, 直接上优先队列进行自动排序.,表示各堆礼物的数量。最后我们一起来看一下整体的解题方案, 代码如下所示.每日一题 2023.10.28。秒后剩下的礼物数量。原创 2023-10-28 17:42:30 · 202 阅读 · 0 评论 -
1465. 切割后面积最大的蛋糕
接下来, 我们就一起看一下整个题目的题解过程, 为了减少遍历次数, 我们需要把横向数组和纵向数组首先进行一次排序.当理解题意时, 这个题目其实非常的简单, 我们需要找的是什么?之后, 我们就可以求出结果来. 当然了, 要进行取模操作.然后我们就需要寻找最大边距, 这里有三种情况需要讨论。. 然后横向间距与纵向间距相乘就是题目的题解结果.: 其他刀我们只要考虑它和前一刀的情况即可.接下来, 我们就看一下整体的题解过程.每日一题 2023.10.27。是从矩形蛋糕的左侧到第。所有相邻的两刀最大的间隔。原创 2023-10-27 18:18:36 · 154 阅读 · 0 评论 -
2520. 统计能整除数字的位数
这个题目其实非常的简单, 根本没有任何套路, 但是要注意一点, 不要截取字符串再然后判断, 因为字符串和数字的转换过程中非常消耗资源, 我们就只能通过取余的方式来获取到每一个数位, 进而求出该数位是否符合题意.每日一题 2023.10.26。整体逻辑代码如下所示.原创 2023-10-26 09:57:14 · 140 阅读 · 0 评论 -
2698. 求一个整数的惩罚数(看官方题解, 已解)
按选优条件向前搜索, 以达到目标. 但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。在遍历过程中, 如果当前的总和比目标总和还要大, 后面就不用遍历了(再遍历也是加法, 总和会更大), 直接返回False就行. 表示这个链路失败.其实很早就听说回溯法, 一直没有实践机会, 今天做这个题目, 看到官方的题解是回溯法, 就是查了查相关的内容. 总算对回溯法有了一个大体的了解.主要有以下几个条件.原创 2023-10-25 14:38:04 · 164 阅读 · 0 评论 -
2316. 统计无向图中无法互相到达点对数
这个题目其实就是对无向图的邻接表的理解, 那么求两个点没有任何关联, 我们只要如果只要求出一条完整的边, 那么剩下所有的节点一定与这条完整的边不连接, 不连接的含义就是这条边上的节点与剩下的所有节点都是两两无法相互到达.首先, 我们先创建无向图的邻接表, 这里我使用的是HashMap来作为邻接表的存储空间.然后最后的计算结果因为所有的个数都计算了两遍, 我们需要除以2来求出最终的结果.个, 那么对于这条边上的所有节点与剩下的节点两两无法相互到达的组合个数为。同时给你一个二维整数数组。时, 同样会计算一遍。原创 2023-10-23 23:32:25 · 118 阅读 · 0 评论 -
2678. 老人的数目
这个题目其实非常的简单, 我们直接根据题意截取第12位字符和第13位字符即可. 我们直接通过ASCII表判断两个字符是大于 ‘60’ 的即可.中每个元素都是一位乘客的信息,信息用长度为。每日一题 2023.10.23。整体逻辑代码如下所示.原创 2023-10-23 16:41:21 · 124 阅读 · 0 评论 -
2525. 根据规则将箱子分类
这个题目其实非常的简单, 根本不需要考虑, 按照题目的条件写逻辑分支语句即可. 但是我非要整活, 用。如果箱子是 “Bulky” 但不是 “Heavy” ,那么返回类别为。然后一个switch分支逻辑中, 按照不同的状态返回不同字符串即可.,分别表示一个箱子的三个维度和质量,请你返回一个表示箱子。来组合的. 那我们就先来确定这两个原子性的状态.,箱子的体积等于箱子的长度、宽度和高度的乘积。每日一题 2023.10.20。我们发现盒子的任何状态都是由。, 来组合出当前盒子的状态.如果箱子的质量大于等于。原创 2023-10-20 10:28:27 · 119 阅读 · 0 评论 -
1726. 同积元组
这个题目如果用两层暴力遍历方案一般会超时, 昨天晚上12点时看到这个题只想到了暴力模拟方案, 今天早上想了一下, 为啥不用HashMap来存储乘积呢?有了这样的思路之后, 我们首先构建乘积的HashMap, 其中key为乘积值, value为能形成该乘积的两两元素的个数., 从n个中元素每次选出2个元素, 一共有多少种排列?接下来, 我们一起看一下整体的解题思路.每日一题 2023.10.19。的两两元素个数大于等于。原创 2023-10-19 14:40:56 · 187 阅读 · 0 评论 -
2530. 执行 K 次操作后的最大分数
直接暴力法就是我们按照题意进行模拟运行, 每一次取完数组中的最后一个值就根据题意更新这个值, 然后重新排序整个数组.中取最大值. 同时, index也需要偏移. 并且把。接下来, 我们就一起看一下按照这个思路的整体的解题过程., 这种方式我们不需要管理内部的排序逻辑, 直接通过。排序完成之后, 然后取出最后一位数据时, 并进行。的数据(删除最大值, 计算后放入数组尾部).取出最大值, 然后计算后再添加到优先队列中.接下来, 我们一起看一下整体的代码逻辑., 那我们就找一个不用排序的方式.原创 2023-10-18 14:07:47 · 336 阅读 · 0 评论 -
2652. 倍数求和
这个题目按照遍历查找好像没有啥难度, 就直接遍历查找符合题意的数字即可.返回一个整数,用于表示给定范围内所有满足约束条件的数字之和。首先说一下等差数列的概念, 对于这个题目来说就是从。整除的和, 那我们知道, 会有如下的等差规律。, 求这个等差数列的和, 那么就如下所示.每日一题 2023.10.17。整除的表达式如下所示.整除的所有整数之和。遍历查找 + 暴力搜寻。整体逻辑代码如下所示.等差数列 + 容斥原理。整体逻辑代码如下所示.原创 2023-10-17 18:01:54 · 189 阅读 · 0 评论 -
137. 只出现一次的数字 II
这个题目一开始做的时候也是没有太好的思路, 看了官方题解, 感觉解法3和解法4有点太偏了. 还是第二种方式比较好理解一点.位没有数字, 那么这一位一定能被3整除. 因为只可能是3的倍数. 不能整除,那就是结果在这一数位也是有值的.你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。解法2的核心思想是对于最后的结果换算成二级制是有32位(). 那么我们就对每一位进行判断, 如果结果数字在。请你找出并返回那个只出现了一次的元素。我们一起看一下具体的解题过程.外,其余每个元素都恰出现。原创 2023-10-16 13:59:43 · 72 阅读 · 0 评论 -
136. 只出现一次的数字
由于该题目有且只有一个数字是单个, 其他数字都是成双成对, 所以我们把所有数字异或操作, 那么就会得到我们想要的结果.,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。了解完整体的思路之后, 我们一起看一下整体逻辑代码.先说答案, 这个题目使用的位运算是。每日一题 2023.10.14。的特点是当两个相同的数进行。原创 2023-10-16 10:37:36 · 115 阅读 · 0 评论 -
1488. 避免洪水泛滥
天, 当某一个湖要泛滥时, 我们尝试往前找能抽干湖的机会. 找到了就万事大吉. 找不到就直接导致洪水泛滥, GG.请注意,如果你选择抽干一个装满水的湖泊,它会变成一个空的湖泊。都要泛滥了, 单独来看每一个湖都可以在两次机会中任选一个, 但是两者合在一起的时候,所以对于能抽干湖的机会, 我们要保存下来它的所在天数(所在下标), 当后面某。对于第i个湖, 两次下雨之间一定要有一次能抽水的机会, 才能避免泛滥。表示湖的水量, key是湖的下标, value表示湖的水量.是存储的抽干湖的机会所在天数(所在下标),原创 2023-10-13 16:51:41 · 94 阅读 · 0 评论 -
2562. 找出数组的串联值
定义一个双指针, 然后从数组的左右两边往中间移动, 一共会有三种情况.由于数字转字符串的时间消耗过长, 所以这里写一个函数, 计算。接下来, 我们一起看一下整体的实现逻辑, 具体代码如下所示.接下来, 我们一起看一下整体的实现逻辑, 具体代码如下所示.中的第一个元素和最后一个元素,将二者串联得到的值加到。如果仅存在一个元素,则将该元素的值加到。每日一题 2023.10.12。的串联值上,然后删除这个元素。中删除第一个和最后一个元素。时, 直接添加当前的元素.时, 进行串联操作.时, 停止遍历操作.原创 2023-10-12 11:10:34 · 148 阅读 · 0 评论 -
2512. 奖励最顶尖的 K 名学生
以词语为key, 以分数为value. 由于正面的和负面词语一定不会有重复的, 所以我们可以把它们放到一个HashMap中. 并且为了减少遍历次数, 我们可以把。第二个数字代表着学生的ID. 其他就是分割评价语句, 累计每一个学生的积分.,分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。整体题目没有太多的难度. 所以接下来, 我们一起看一下具体的解题过程.中较长的数组作为遍历的终点, 从而只进行一边遍历.分,每个负面的词会给学生的分数 减。每个正面的单词会给学生的分数 加。原创 2023-10-11 15:11:18 · 60 阅读 · 0 评论 -
122. 买卖股票的最佳时机 II
对于持有股票的情况, 由于手里最多能持有一个股票, 那么当前的最大获利就是。在某一天, 分为两种情况, 一种是持有股票, 另外一种情况则是不持有股票.这个题目肯定是以动态规划的形式解决, 那么我们就需要找到状态转移方程.对于任何一天手里没股票肯定比有股票要赚的多…那么根据上面的情况, 我们会有一下的状态转移方程.对于不持有股票的情况, 那么当前最大获利就是。的情况下, 我们初始化状态转移方程的初始值.每日一题 2023.10.02。天不持有股票的最大获利.天持有股票的最大获利.前一天持有股票的价格。原创 2023-10-10 18:13:21 · 53 阅读 · 0 评论 -
2731. 移动机器人
如上图所示, 当两个机器人碰撞的时候, 两者虽然调换了方向, 但是我们不妨这样理解, 它们做了灵魂交换, 红色机器人碰撞之后继续沿着绿色机器人的方向移动, 绿色机器人碰撞之后继续沿着红色机器人的方向移动. 两者的步距都是。例如,如果一个机器人位于位置 0 并往右移动,另一个机器人位于位置 1 并往左移动,下一秒,第一个机器人位于位置 0 并往左行驶,而另一个机器人位于位置 1 并往右移动。种情况会涉及黄色的待累计的距离. 我们一起看一下两两之间的距离和的代码实现是怎样的, 如下所示.原创 2023-10-10 17:28:30 · 82 阅读 · 0 评论 -
2578. 最小和分割
整体思路和我上面的是一样的, 不过官方的遍历的思路是一遍遍历, 交替赋值. 那么也不需要上面后期对两堆数字进行排序的操作了. 减少了时间复杂度., 同时保证两堆组成的数字之和最小, 那么分配规则一定是。然后, 我们需要对两堆数组进行排序, 然后组装成数字即可.分成和最小的两个数. 那么根据尝试一定要有以下的规律.. 一定是最小的数字在高位, 最大的数字在低位.这样的顺序才能保证两堆组成的数字之和最小.每日一题 2023.10.09。这个题的思路是这样的, 要想把。可以包含前导 0。的数字进行递增排序;原创 2023-10-09 17:30:09 · 137 阅读 · 0 评论 -
2034. 股票价格波动
某些情况下,有的记录可能是错的。如果两个有相同时间戳的记录出现在数据流中,前一条记录视为错误记录,后出现的记录。中, 我们需要判断在更新完成, 从价格HashMap中(PS: 存储了所有的价格)重新获取。的时间点的价格是否存在) 之后, 更新其中的天数即可, 如果天数为0, 那么就移除即可.对于当前价格, 我们只需要存储最后的日期, 每一次更新操作, 我们都尝试更新这个最后日期., 其中 key为价格, value为价格的天数(PS: 哪些天处于key价格)的思想中, 我们只能遍历价格的Map, 找到。原创 2023-10-08 18:22:51 · 49 阅读 · 0 评论 -
901. 股票价格跨度
暴力方案其实很好理解了, 但是存在很多重复的遍历过程, 我们不妨考虑, 这样的一种情况, 当我们知道前面某天A的价格的。暴力方案就很简单了, 我们只需要按照题目要求创建一个数组空间用来存储每日的价格, 要求该股票当日价格的。那么我们在遍历过程中就可以增加这样的过程减少遍历次数, 但是我们需要另外创建一个数组用来保持某一天的。, 那么如果后面某一天比A的价格还要高, 那么他的价格跨度区间同样适用于这一天. 如图所示., 从而减少遍历的次数. 如下图所示.对于优化跳转的代码, 具体如下所示.原创 2023-10-07 20:42:23 · 63 阅读 · 0 评论 -
605. 种花问题
题目的要求很简单, 那就是每一颗花不能相邻, 那么也就是种的最密的情况就是隔一个空种一朵花. 所以我们可以利用贪心的思想, 我们只需要把花的数组遍历一遍, 然后隔一个空种一朵花即可.假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。首先, 在遍历过程中, 遇到已经种上花的位置直接跳过.最后我们一起来看一下整体的解题方案, 代码如下所示.,能否在不打破种植规则的情况下种入。每日一题 2023.09.29。最后就是普通情况的处理了.原创 2023-09-29 00:39:51 · 63 阅读 · 0 评论 -
2251. 花期内花的数目(看官方题解, 已解)
当看这个这个题目的元素量级之后, 我就知道, 如果双层循环暴力方案一定会超时失败, 所以我就在想如何减少运行时间, 我首先想到的就是HashMap.官方有两种方式, 一种是查分, 一种是二分法, 这里我现在使用二分法.来说, 我当时的考虑是它是一个时间点, 而每一朵花的花期是一个时间区间, 当时在想如何降维处理, 就是对于。看花时间, 如果先前没有缓存, 我们就缓存当前时间所有开放花的个数, 这样下一次某一个的看花时间 与。的操作, 但是他俩的效率差的不是一星半点. 我们看一下测试用例跑完的耗时.原创 2023-09-28 14:51:32 · 59 阅读 · 0 评论 -
1333. 餐厅过滤器
这个题目看似题目很长很难解的样子, 实际上当读懂题意之后非常简单, 主要是分为两大部分, 一个是搜索出条件合适的餐厅, 另外就是对这些餐厅进行排序.的餐馆,为 false 则意味着可以包括任何餐馆。此外,我们还有最大价格。两个过滤器,它们分别考虑餐厅的价格因素和距离因素的最大值。接下来我们一起看一下整体的解题思路, 代码如下所示.你必须使用以下三个过滤器来过滤这些餐馆信息。筛选出合适条件的餐厅, 筛选条件包括。每日一题 2023.09.27。给你一个餐馆信息数组 r。对筛选的餐厅进行排序.原创 2023-09-27 10:38:26 · 53 阅读 · 0 评论 -
2582. 递枕头
最初,排在队首的第一个人拿着一个枕头。每秒钟,拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾,传递方向就会改变,队伍会继续沿相反方向传递枕头。这个题目其实非常简单, 我们直接使用模拟法即可.最后, 我们一起看一下这道简单题目的解题过程.这样的大循环去除, 剩余秒数我们一定是从。个人中传递, 所以, 我们先把所有。所以我们需要首先计算出去除 所有的。每日一题 2023.09.26。不管你走了多少秒, 枕头一定会在。的循环, 还剩余的秒数. 其中。秒后拿着枕头的人的编号。原创 2023-09-26 11:33:12 · 91 阅读 · 0 评论 -
460. LFU 缓存(看官方题解,已解)
(看到官方题解了) 这时候, 从整体数据结构上来说, 我们必须要增加一个数据结构, 来解决上面节点查找时间复杂度问题, 毫无疑问, 我们需要创建一个以。存在key对应的节点的情况, 我们主要的工作是更新节点的value值, 提升Node节点的频率, 调整其在双向链表中位置, 整体逻辑与。但是, 这样的结构如果要查找某一个中间节点(升级使用频率时), 我们肯定要从头查找双向链表, 时间复杂度是。的双向列表没有任何元素了, 也需要进行链表的删除, 并且要考虑整个LFU的最低频率的调整问题.原创 2023-09-25 16:58:28 · 64 阅读 · 0 评论 -
146. LRU 缓存
的相关数据, 那我们需要创建新的节点, 同时判断当前的总节点数是否超出预设值, 如果超出, 就从尾部删除最后一个节点. 没超出则不进行删除操作, 当然了, 新增的节点不在需要移动节点的操作, 只需要把新增节点放在双向链表的头部即可.然后, 我们通过双向链表头部节点header和尾部节点tail, 这两个节点只是作为一个标志位, 没有实际标识含义, 所有的节点都会在这两个节点中间.的数据原则, 所以当我们在get某一个数据的时候, 我们要把它放在双向链表的最前部. 这时候我们就需要两个操作.原创 2023-09-24 16:42:04 · 36 阅读 · 0 评论 -
1993. 树上的操作
指定用户给指定节点 上锁 ,并且将该节点的所有子孙节点 解锁。主要是用来快速查找到某一个节点, 我们不需要重头遍历, 但是官方解法中邻接表的作用也是和我的这个很类似.:指定用户给指定节点 解锁 ,只有当指定节点当前正被指定用户锁住时,才能执行该解锁操作。利用深度优先遍历, 往下递归遍历所有子节点. 把所有带锁的节点都临时添加到带锁节点数组中。,因为它没有父节点。, 里面三个节点是以4节点为父节点了, 重新审题, 然后明白了一切…节点类, 节点包含父节点下标, 子节点数组, 以及锁信息.原创 2023-09-23 14:24:01 · 56 阅读 · 0 评论 -
2591. 将钱分给最多的儿童
没人获得4元, 只有一种case, 那就是剩余最后一个人拿4元, 两个人分多少钱都能规避这种情况.count数量 比 孩子数量多, 有一个孩子要多拿剩余的钱 children-1 就是结果。, 有余数, 有一个孩子要多拿余数 children-1 就是结果。这个问题, 想了半天也没有想到官方的题解方案. 所以就基于。, 直到所有孩子都能拿到钱, 只有这种情况不满足才会有。,表示你总共有的钱数(单位为美元)和另一个整数。每日一题 2023.09.22。,表示你要将钱分配给多少个儿童。整体逻辑代码如下所示.原创 2023-09-22 13:31:14 · 72 阅读 · 0 评论 -
337. 打家劫舍 III
这个题目我一开始考虑到的是利用二叉树的层序遍历, 把每一次层的金钱数遍历出来, 但是发现其实上思路是错误的. 因为我们要遵循的条件只有。那么, 我们需要还是动态规划的思想, 一个节点只能有偷与不偷的两种选择, 要求某一个节点的获取金币数量最大化, 我们可以分情况讨论.如果按照层序遍历的解题思路, 我们要想获得最大钱数, 我们只能选择第一层和第三层, 如下图所示. 那么最大收益是。然后进行深度优先遍历, 遍历的过程, 我们就来根据上面我们总结的动态规划思路来构建我们的HashMap.但是正确的选择是什么呢?原创 2023-09-21 14:39:26 · 41 阅读 · 0 评论