
leetcode刷题总结
TheJustice_
这个作者很懒,什么都没留下…
展开
-
2024.9.6 刷题总结
98.验证二叉搜索树,这道题考察的是递归,二叉搜索树的定义是,左子树节点比当前节点值小,右子树节点比当前节点值大。230.二叉搜索树中第k小的元素,这道题考察的是二叉搜索树的性质,因为节点的左子树只包含小于当前节点的数,右子树只包含大于当前节点的树,所以二叉搜索树的中序遍历是按照升序来遍历的,我们只需要做一次中序遍历找到第k个元素即可。24.两两交换链表中的节点,这道题考察的是链表和递归,递归的终止条件是链表中没有节点或者链表中只有一个节点,若链表中有两个以上节点,那么就按顺序两两交换顺序。原创 2024-09-06 11:58:17 · 216 阅读 · 0 评论 -
2024.9.5 刷题总结
108.将有序数组转换为平衡二叉搜索树,中序遍历,总是选择中间位置左边的数字作为根节点,以升序序列中的任一个元素作为根节点,以该元素左边的升序序列构建左子树,右边的升序序列构建为右子树,这样就能得到二叉搜索树了。3174.清除数字,这是一道简单的模拟题,我们只需要用一个空字符串来模拟即可,如果遇到字母就放入新字符串,如果遇到数字就弹出一个。原创 2024-09-05 16:04:41 · 451 阅读 · 0 评论 -
2024.9.4 刷题总结
110.平衡二叉树,平衡二叉树的定义是树的所有节点的左右子树的深度相差不超过1,所以判断的标准是要求出节点的高度。最后主函数中需要判断的条件是左右子树的深度是否最大深度相差不超过1并且左右子树是否都满足条件,这个即是递归的条件。LCR 145.判断对称二叉树,需要写一个判断两个子树是否对称的函数,如果两个节点其中一个为空,那就不是,两个都为空,就是。否则就返回两对子节点的检查情况。2860.让所有学生保持开心的分组方法数,这是一道考察数学和排序相关的题目,当选择学生人数固定的时候,选择方案是唯一的。原创 2024-09-04 15:55:31 · 212 阅读 · 0 评论 -
2024.9.2 刷题总结
2024.考试的最大困扰度,这道题考察的是滑动窗口的知识,我们不断向前枚举右端点,遇到不符合的字符就转换次数+1,当超过了k值之后就不断向前移动左端点,直到小于等于k,然后每次右端点向前都需要更新最大值,注意一共有tf两种情况,所以应该取两者中的最大值。快速排序:参考分治的思想,每次找一个基准值,这里找的是arr[low],每次从右往左找到第一个比基准值小的数,判断下标是否符合条件,是就交换;再从左往右找到第一个比基准值大的数,判断下标,符合就交换,否则不变;当i和j重合时,代表基准值不用再移动了。原创 2024-09-02 15:58:54 · 255 阅读 · 0 评论 -
2024.9.1 刷题总结
128.最长连续序列,这道题考察的是哈希表和数组的相关知识。当无法继续遍历的时候,更新答案的最长序列。56.合并区间,这道题考察的是数组和排序的相关知识,根据题意,我们需要将区间重合的数组先合并再插入到答案数组中,那么我们自然想到,当数组中的元素左端点越小时,越有可能被合并,所以我们先按左端点排序。然后遍历每一个时间区间,第一个直接加入,然后对于后续每一个我们需要判断答案数组最后一个区间的右端点是否大于等于新区间的左端点,如果符合那么就更新答案数组的最后一个元素的右端点为新元素的右端点,代表区间被延长了。原创 2024-09-01 11:32:16 · 284 阅读 · 0 评论 -
2024.8.24 刷题总结
239.滑动窗口的最大值,这道题考察的是滑动窗口和队列的知识,刚开始看错题目了,求成了滑动窗口可能出现的最大值和出现最大值的滑动窗口内容,但题目要求的是滑动窗口每次滑动中内部的最大元素。300.最长递增子序列,这是一道非常经典的动态规划题目,一样是从前往后遍历更新状态,我们需要用一个数组来维护以每个元素结尾的最长上升子序列,结果最小是1,双循环遍历每个元素,如果在每个元素前找到比自己小的,那么就更新一次答案,最终答案为以每个元素为结尾的最长递增子序列中的最大值。原创 2024-08-24 15:15:45 · 208 阅读 · 0 评论 -
2024.8.23 刷题总结
279.完全平方数,这道题考察的是动态规划的知识,依题意得,我们需要找到最少的平方数之和使得等于要求的数,我们首先会想到用离该数最近的完全平方数来考虑,但是这样不方便枚举和遍历,所以我们采用动态规划的一般方法,先处理前面的数,再遍历到后面的数。198.打家劫舍,这道题是一道简单的入门动态规划问题,根据题目意思,我们不能取数组中相邻的元素然后还必须满足总结果最大,所以我们可以维护一个数组,用来保存在数组每个位置之前能取到的最大值,然后最后输出第n-1个元素的值即为答案。原创 2024-08-23 16:54:51 · 799 阅读 · 1 评论 -
2024.7.29 刷题总结
682.棒球比赛,这道题是一道简单的模拟题,用栈模拟题中的四个操作就可以了,操作一是将x加到列表末尾,操作二是将列表的后两项之和加到列表末尾,操作三是把列表最后一项的两倍加到列表末尾,操作四是去掉列表最后一项。LCR 100.三角形最小路径和,这道题是一道入门的动态规划题目,当然也可以用dfs来求解。我们只需要用一个数组来记录到达每个点需要的最小路径,然后再把最后一行取一个最小值即可。原创 2024-07-29 19:31:24 · 257 阅读 · 1 评论 -
2024.7.28 刷题总结
首先定义一个转化为大根堆的函数,每次从最后一个非叶节点开始向上遍历,判断当前节点和左右节点的大小关系来建立大根堆,然后再更新当前索引,即递归的思想,每次以当前节点为根节点往下交换节点,maxHeapify函数的作用是将当前节点作为根节点实现大根堆,buildMaxHeap函数的作用是建立初始大根堆,从数组大小的一半作为索引开始往上建立。先建立初始大根堆,然后循环n-k+1次,每次先把堆顶和堆尾节点交换,然后数组大小减一,代表把堆尾元素删除,即原来的堆顶元素,然后继续建立新的大根堆,直到取出第k大的元素。原创 2024-07-28 18:49:24 · 613 阅读 · 0 评论 -
2024.7.19 刷题总结
543.二叉树的直径,这道题是一道考察递归的题目,按照树的一般算法,维护一个最大直径答案值,定义一个递归函数,开头是递归返回条件,即当前节点为空节点就返回0,否则分别往左和往右递归,维护每个节点的最大深度为左右最大深度中的最大值再加一,答案用左右节点的最大深度的和再加一来维护.124.二叉树中的最大路径和,这是一道考察递归的题目,从根节点出发,类似于dfs,分别递归寻找左右节点的路径和,直到叶子节点再返回,从叶子节点往上更新以每个节点为根节点的最大路径,直到返回根节点,用一个变量来维护答案.原创 2024-07-19 22:36:19 · 433 阅读 · 0 评论 -
2024.7.16 刷题总结
2956.找到两个数组公共的公共元素,这道题是一个哈希表的简单题目,根据题意,我们需要统计的是每个数组在另外一个数组中也存在的元素个数,所以我们建立两个哈希表,分别统计两个数组中出现的元素的情况,数据范围很小,这里选用数组模拟哈希表或者用STL的哈希表都可以完成,统计完之后再分别遍历两个数组找出答案即可。原创 2024-07-16 15:55:34 · 365 阅读 · 0 评论 -
2024.7.15 刷题总结
对于一个节点,只要左节点往下走或者右节点往下走有一条路是成功的,那么就返回true,所以递归的思路就明确了,还需要再写出结束条件,如果节点为空,那么就返回false,如果节点左右节点均为空,则需要判断当前节点值和剩下的目标值是否相等,递归的时候我们就是用当前root的左右节点两种情况来判断,而且目标值每次需要减去当前节点的值,这个是关键。可以考虑迭代的思想,用一个队列来存储需要判断的节点,刚开始存储的是根节点的左右节点,每次从队列中取出两个节点,然后先判断特殊情况,空指针和值不相等的问题。原创 2024-07-15 12:12:31 · 183 阅读 · 0 评论 -
2024.7.14 刷题总结
807.保持城市天际线,这是一道简单的矩阵和数学问题,题目的意思是增加那些高度较小的建筑,不影响四面的视图,所以我们很快就能明白限制的因素是该建筑所在行和所在列的最大值,取它们两者之间的更小值减去原始高度即为所求。刚开始看到这道题时,还以为需要预处理出四个面的结果,但是仔细一想发现,左右和上下的视图是相同的,所以只需要处理两个面的结果就可以,即每行和每列的最大值。226.翻转二叉树,这道题是一道典型的递归题目,我们需要先翻转叶子节点,然后再整体把整个左右子树调换,所以需要从最下层开始翻转,符合递归的条件。原创 2024-07-14 13:51:33 · 265 阅读 · 0 评论 -
2024.7.13 刷题总结
94.二叉树的中序遍历,这道题是一个简单的栈辅助遍历的题目,我们首先需要初始化一个答案数组和栈来辅助。然后根据中序遍历的意思,只要当前节点不为空或者栈不为空,就说明还有节点未遍历,我们就一直将root节点移动到它的左节点,直到变为空指针,这时候我们就可以将栈顶弹出,将该值加入答案数组,然后访问右节点,这样就实现了永远优先访问左节点,直到为空指针再访问中节点,再访问右节点,而当出现右节点也为空指针时,就会继续弹出栈顶的节点,继续向上遍历。栈里面只存放了所有左节点,而右节点需要手动遍历。原创 2024-07-13 12:32:08 · 366 阅读 · 0 评论 -
2024.7.12 刷题总结
457.环形数组是否存在循环,这道题是一个考察快慢指针的题目,将数组中的n个点看作图中的n个节点,再将i+nums[i]看作每个节点延伸出去的单向边,所以现在题目变成判断有无环路的题目,这时我们就可以遍历数组,初始化快慢指针,快指针在慢指针前面一步,然后每次快指针走两步,慢指针走一步,直到他们相遇。还需要标记一个已经走的步数,最后判断答案时,步数需要大于1才是有效的答案,并且在走的过程中,需要设置步数大于一定值自动退出,否则会出现runtime error.然后我们再遍历数组加上答案即可。原创 2024-07-12 10:35:23 · 412 阅读 · 0 评论 -
2024.7.11 刷题总结
206.反转链表,本题考察的是链表的基本性质,在反转操作时,我们可以看作是将当前节点的后继节点改为前驱节点,遍历一次即可完成。这个操作就相当于先确定最后一个节点,然后依次往前确定节点。然后从最后一个元素开始遍历,直到出现非下降元素就终止,每遍历一个元素,就找出最大的前缀满足连接处的大小关系,然后再叠加答案。160.相交链表,这道题用的是哈希表来存储链表的节点,我们先遍历A链表,将所有节点加入哈希表中,然后再遍历链表B,如果在哈希表中找到了对应值,那么就返回该值,否则返回空指针。原创 2024-07-11 18:56:16 · 702 阅读 · 0 评论 -
2024.7.10 刷题总结
题目的意思是要统计有多少个子数组能满足移除后剩下的元素为严格递增的关系,刚开始没考虑到移除的元素要是连续的,所以出错了。首先,我们可以先统计一下数组的最大前缀, 如果整个数组都是递增的,那么我们就不用再算其他情况了;对于这种两边都需要枚举讨论的题目,我们可以只枚举一边,然后判断另外一边的数值,所以我们选择枚举后缀,只要后缀满足往前递减的关系,我们就进行计算,我们先让最大递增前缀往回,直到连接处满足关系,然后此时答案就是最大前缀的下标加2,剩下的任务就是模仿这个过程完成循环,直到后缀不满足情况就结束。原创 2024-07-11 18:05:55 · 1193 阅读 · 0 评论 -
2024.7.6 刷题总结
如果没有,就放入,判断是否满足条件,如果不满足,再依次把六种可能的情况放入,分别是把 X 壶灌满,把 Y 壶灌满,把 X 壶倒空,把 Y 壶倒空,把 X 壶的水灌进 Y 壶,直至灌满或倒空,把 Y 壶的水灌进 X 壶,直至灌满或倒空。经过数学分析发现,只需要枚举数组的右端点,维护一个当前子数组值的变量,当前数和前一个数不一样时,我们就令子数组的元素个数+1,如果相同,我们就令变量重新为1,然后每次循环结束都把当前的值加到答案中,保证能计算到每个右端点代表的子数组的值。原创 2024-07-06 14:55:04 · 192 阅读 · 0 评论 -
2024.7.5 刷题总结
202.快乐数,这道题直接看就是通过判断一个数通过规则变换能不能最终回到1或者是进入无限循环,如果我们根据路线就可以得出是判断有没有环的题目,所以我们可以使用快慢指针的方法,若循环,即出现环时,快指针会追上慢指针。3033.修改矩阵,本题为简单模拟题,题意是找到每列的最大值,然后把值为-1的更换即可,所以我们需要遍历两次数组,第一次把不是-1的点写入并且维护列的最大值,第二次把-1的点用列最大值更换即可。原创 2024-07-05 14:17:54 · 214 阅读 · 0 评论 -
2024.7.4 刷题总结
3086.拾起k个1需要的最少行动次数,在这道题我们可以把0看成空位,第二种操作相当于把一个1移动到和它相邻的空位上,而第一种操作则是贪心地把和当前下标相邻的0变成1;maxchanges较小的情况是,几所所有长为k-maxchanges的子数组的货仓选址问题,再取最小值。通过设置一个当前遍历的元素个数和需要遍历的数组来维护dfs函数,维护一个当前的集合和答案集合,当个数达到原数组大小时返回,遍历时包含两种情况,分别是考虑当前元素和不考虑当前元素,每次都先达到了最大元素个数,再依次返回。原创 2024-07-04 17:53:48 · 225 阅读 · 0 评论 -
2024.7.3 刷题总结
31.下一个排列,本道题考察的是双指针,题目的意思是找到下一个字典序更大的排列,所以我们的任务是把一个数组右边的一个较大数与数组左边的一个较小数交换,并且它们的距离应当尽量近,所以算法的步骤就是首先从后往前查找第一个顺序对,不满足降序的关系,标记为i.然后在i+1到n从后往前查找第一个下标j满足后数大于前数,然后交换两个数,并且将i+1到n之间的序列反转.3099.哈沙德数,简单数学题,我们的目的是计算出每一位数的和,所以我们每次取数模10的结果,然后令其除10,最后判断是否能整除即可。原创 2024-07-03 16:29:56 · 351 阅读 · 0 评论 -
2024.7.2 刷题总结
3115.质数的最大距离,本道题是一个简单的模拟题,题意是找到数组中第一个质数和最后一个质数,可以通过写一个质数筛来预处理标记质数再输出即可;由于本题的数据范围较小,所以我们只需要用最简单的指数判断方法即可,每个数都遍历到它的根号范围,然后分别通过正向和反向遍历找到第一个和最后一个质数,输出他们的下标差即可。1441.用栈操作构建数组,本题是一个简单模拟题,遍历n,当我们的目标数字在target中就只用Push,否则需要先Push再Pop,维护一个prev记录上一次操作时栈顶的索引值。原创 2024-07-02 14:13:21 · 482 阅读 · 0 评论 -
2024.7.1 刷题总结
本题还可以利用Djikstra最短路算法进行剪枝,提前处理好起点到每个节点的最短路,同时也是每个节点到起点的最短路,在递归到下一个节点之前,判断下一个节点在走最短路的前提下,能否在maxTime时间内回到起点0,若不能,则不递归。获取随机元素的函数:rand()11.盛最多水的容器,本题是一个双指针的题目,依据题意得,水量等于两边高度更小的一边乘上下标之差,所以我们只需要利用双指针遍历一次数组即可得出最终答案,每次更新当前最大值,并且令两端更小的向中间靠拢,本质上是一个贪心的思想。原创 2024-07-01 21:13:57 · 259 阅读 · 0 评论 -
2024.6.30 刷题总结
现在问题就转变为通过从数组中选取若干元素作为添加负号的元素,他们的和要与全部元素的和减去目标值再除以2相等,所以就转换为动态规划问题,dp[i][j]表示从前i个数种选取元素使得与j相等的方案数,最终答案为dp[n][(sum-target)/2];100340.三角形的最大高度,本题是一个简单模拟题,根据题意,一共有两种情况,分别是蓝球和红球在第一层的情况,所以我们只需要分别执行这两种情况来计算高度,答案是这两种情况下的更大的一方,通过判断层数的奇偶性来判断即可。原创 2024-06-30 12:36:15 · 356 阅读 · 0 评论 -
2024.6.29 刷题总结
2710.移除字符串中的尾随零,本题是一个简单模拟题,考察一些字符串的基本操作,最直接的思想就是从后往前遍历,标记第一个不为0的下标,然后取这个下标之前的数即可。substr的作用是只保留范围内的字符,find_last_not_of的作用是找到最后一个不为0的位置,也可以手写循环代替。原创 2024-06-30 00:13:46 · 270 阅读 · 0 评论 -
2024.6.28 刷题总结
2742.给墙壁刷油漆,根据题意,可以得出几个结论,首先是付费刷墙的总时间要大于等于免费刷墙的个数,其次是付费刷墙个数与免费刷墙个数之和为n,结合之后得到付费刷墙时间之和大于等于n-付费刷墙个数,即[付费刷墙时间+1]之和大于等于n,所以我们把这个看作一个01背包的题目,时间+1作为体积,花费作为价值。uint32_t 这个是用来定义一个32位的二进制串。原创 2024-06-28 18:47:51 · 440 阅读 · 0 评论 -
2024.6.27 刷题总结
2734.执行子串操作后的字典序最小的字符串,根据题意,只会出现一次操作,令一个区间内的字符变成自己的前一个字母,所以只有'a'是特例,其他都符合条件,那么我们先判断字符串是否为全a,如果是那么就只用把最后一个a换成z即可;50.Pow(x,n),本题考察的是快速幂算法,利用了递归的思想,计算x的n次方时,可以先计算出y=n/2次方,判断N是奇数还是偶数,如果是偶数就是y*y,奇数则为y*y*x.递归边界为N=0.原创 2024-06-27 11:42:52 · 479 阅读 · 0 评论 -
2024.6.26 刷题总结
526.优美的排列,该题考察的是状压dp的知识,用一个n位的二进制数表示排列中的数被选取的情况,若为1,则表示该位被选取,若为0,则表示该位没有被选取,用一个数组来存储当前情况下的排列数,当前的状态应该由以下所有情况转移而来:枚举当前二进制数中1的位置,若该位置往后一位满足题目的条件,那么就加上这个状态的排列数,遍历所有,最后输出f[(1<<n)-1];2741.特别的排列,这题跟上题有些相似,不过这些数字不是依次增大的,利用递推的方法,不断寻找前一个状态的值,并且累加。原创 2024-06-26 17:20:19 · 200 阅读 · 0 评论 -
2024.6.25 刷题总结
2723.找到矩阵中的好子集,该题考察了一定的数学推导能力,如果答案只有一行,那么必须全0,如果是2-3行,那么每列只能有一个1,如果答案超过四行时,每一行的和最多是k/2,任意两行的AND均不为0,每一行的1的个数的平均值是n/2。20.有效的括号,这题是一个栈的模板题,我们先用map储存相应的括号对应情况,只存后括号,前面的不需要匹配,直接入栈即可,判断的时候需要判断栈顶元素是否和相应的键值匹配。原创 2024-06-25 11:39:34 · 205 阅读 · 0 评论 -
2024.6.24 刷题总结
使用单调栈,单调栈中保存的是下标,该下标数组在原数组对应的值是单调不升的,每次我们移动到数组中的一个新的位置 iii,我们就将当前单调栈中所有对应值小于 nums[i] 的下标弹出单调栈,这些值的下一个更大元素即为 nums[i](证明很简单:如果有更靠前的更大元素,那么这些位置将被提前弹出栈)。但是注意到只遍历一次序列是不够的,例如序列 [2,3,1][2,3,1][2,3,1],最后单调栈中将剩余 [3,1][3,1][3,1],其中元素 [1][1][1] 的下一个更大元素还是不知道的。原创 2024-06-24 22:25:04 · 298 阅读 · 0 评论 -
2024.6.23 刷题总结
520.检测大写字母,本题是简单模拟题,考察了ASCLL码相关的知识,根据题意,本题对于字符串有三种正确的用法,所以我们分三类来讨论,先根据首字母的大小写来分类,如果首字母大写我们计数剩下字母串大写字符的数量,如果为0或者为n-1就成立;100342.最小元素和最大元素的最小平均值,这道题本来想用简单数学的方法来求解,认为最后两个移除的元素肯定是最小值,也就是答案,后面才发现自己的想法出问题了,会有特殊情况,所以必须依次比较。设置头尾双指针,依次计算平均值取最小,计算后两端向中间靠拢,最后输出答案。原创 2024-06-23 11:50:04 · 434 阅读 · 1 评论 -
2024.6.22 刷题总结
560.和为K的子数组,该题中的子数组是连续的,所以可以看做是滑动窗口的模板,在这我们使用的是哈希表+前缀和的思想,两个下标的前缀和数组相减即为他们之间元素的和,我们只需要遍历依次数组,同时检查哈希表中是否有符合条件的键值,若存在,则把对应的值加上,同时更新哈希表的值.原创 2024-06-22 14:28:05 · 396 阅读 · 0 评论 -
2024.6.20 刷题总结
哈希表的方法为,不提前处理出哈希表的值,而是遍历数组的同时,对于每个当前数字的第一个,寻找哈希表中互质的数字是否存在,若存在则把所有答案加上,做完这个操作后再将当前的数字加入哈希表(即哈希表中存的是当前元素之前的元素最后一个数字的相应出现次数,保证了有序性),从这题可以得出一个启示,在一些需要保证顺序的题目里,我们可以在遍历的途中同时更新表值,gcd函数:gcd(x,y)原创 2024-06-20 20:17:07 · 233 阅读 · 0 评论 -
二分查找算法模板
在算法题中,二分查找是一个很基础的能力,但是很多情况下都有可能因为一些小条件导致整题的错误,所以我们需要学习并记忆正确的写法,本篇列出了三种情况下的写法。原创 2024-06-19 11:50:06 · 437 阅读 · 0 评论 -
2024.6.19 刷题总结
2713.矩阵中严格递增的单元格数,这题是一道动态规划问题,因为可以跳转到同一行同一列的任意位置,所以我们不需要记录前一个状态,只需要记录更新到每个位置能得到的最大值即可,同时更新每列和每行的最大值。35.搜索插入位置,本题为二分查找模板题,目的是掌握二分的正确写法。原创 2024-06-19 11:46:20 · 161 阅读 · 0 评论 -
2024.6.18 刷题总结
stringstream 是C++标准库中的一个类,属于 <sstream> 头文件。219.存在重复元素,这道题的本质上是滑动窗口的模板题,我刚开始的想法是遍历数组再同时向前遍历k个元素来判断,此时时间复杂度为N*K,为了降低,应使用set结构。2288.价格减免,这是一道纯字符串的题目,我们的目标是识别出字符串中的价格并将它替换为折扣后的数字。stoll(w.substr(1)):将字符串 w 去掉第一个字符后的剩余部分转换为长长整型(long long)原创 2024-06-18 10:29:17 · 274 阅读 · 0 评论 -
2024.6.17 刷题总结
522.最长特殊序列 Ⅱ,本题为前者的升级版,从两个字符串变成一个字符串序列了,所以我们需要依次枚举字符串来进行判断。455.分发饼干,简单排序+双指针的题目,首先对两个数组进行排序,之后利用双指针分别指向两个数组的起点,若满足条件,则一起前进,若不满足,则S数组的指针前进。389.找不同,本题为哈希表的简单应用,只需要先统计s字符串的哈希表值,再遍历t字符串,当遇到哈希值为的字符就返回.326.3的幂,简单模拟题,不断判断是否为3的倍数将数除3,判断最后是否为1,若不是则输出false.原创 2024-06-17 12:36:08 · 499 阅读 · 0 评论 -
2024.6.16 刷题总结
521.最长特殊序列 Ⅰ,脑筋急转弯,其实这里的特殊序列只要是自己的字串即可,那么我们直接取本身就是最长,如果两个字符串不相等,直接取两者的长度最大值就好,如果相等,就返回-1.100301.构成整天的下标对数目 Ⅱ,上题的数据增强版,这里我们考虑查询和维护即可,遍历数组,当每次加上能满足条件的数组的下标个数,再更新当前的数组值。100304.构成整天的下标对数目 Ⅰ,简单模拟题,遍历数组,若找到两个下标对应的数加起来为24的倍数,那么ans++.原创 2024-06-16 15:44:40 · 563 阅读 · 0 评论 -
2024.6.14 刷题总结
2652.倍数求和,该题一看就是简单模拟题,遍历一次当能整除就加上即可。但是这样时间复杂度太高,所以考虑数字中的容斥原理。只考虑整除一个数时,答案数列是一个等差数列。根据容斥原理,最后答案为三个数的答案,减去两两结合的答案,再加上三个一起的答案。2786.访问数组中的位置使分数最大,看到这题就想到动态规划的思路,遍历数组,每次选择移动该元素时能获得到的最大值,分别考虑最后一个的元素为奇数/偶数的最大值,用长度为2的数组来储存这两个值,每次遍历到一个值就更新。原创 2024-06-14 21:34:50 · 201 阅读 · 0 评论 -
2024.6.13 刷题总结
2813.子序列最大优雅度,本题利用了贪心的思想,首先将items按照profit从大到小进行排序,当子序列为前k个项目时,子序列的利润总和最大,但是总优雅度不一定最大,所以此时我们向后遍历,当下一个元素的类别出现两次以上,取利润最小的项目进行替换即可增加总优雅度,用栈来维护整个序列。2894.分类求和并作差,这个是一个简单模拟题,遍历1到n,刚开始可能想到用两个变量来存,后面发现用一个变量也能完成,不整除的加上,整除的减去即可。原创 2024-06-13 21:12:27 · 311 阅读 · 0 评论