算法日记
文章平均质量分 71
记录每日算法题
ZhaZhaPI
被内卷卷死的自闭研究生
展开
-
LeetCode2024年3月19日每日一题(1793. 好子数组的最大分数)
这个算法首先固定了一个点nums[k]作为子数组的最小值,然后通过扩展子数组的左右边界来探索所有可能包含nums[k]且以nums[k]为最小值的子数组。算法的目标是找到这样的子数组,使得它的"分数"(最小值乘以长度)最大。边界扩展:通过两个while循环向左右两边扩展,寻找以nums[k]为最小值的子数组的最大可能边界。分数更新:在每次边界扩展后,更新最大分数res。终止条件:当左右边界都达到数组的端点时,结束循环。动态调整:通过更新nums[k]原创 2024-03-19 11:07:45 · 407 阅读 · 1 评论 -
LeetCode(84. 柱状图中最大的矩形)
单调栈是一种特殊的栈结构,它在解决一类特定的问题时非常有效,特别是那些涉及序列中元素之间相对大小关系的问题。使用单调栈可以帮助我们快速找到一个元素左边或右边第一个比它大(或小)的元素。如果小于等于栈顶元素,则将栈顶元素弹出,直到栈顶元素小于新元素,然后新元素入栈。如果大于等于栈顶元素,则将栈顶元素弹出,直到栈顶元素大于新元素,然后新元素入栈。这段代码通过维护一个单调递减的栈来找到数组中每个元素右侧第一个比它大的元素,从而高效解决了这类问题。通过上述步骤,我们可以找到数组中每个元素右侧第一个比它大的元素。原创 2024-03-19 10:38:01 · 601 阅读 · 1 评论 -
LeetCode(LCP 74. 最强祝福力场)
在二维情况下,差分数组可以用于记录二维区域内部的变化,如本例中的力场强度变化。通过在差分数组的特定位置加上或减去值,可以实现对原数组(即实际的力场分布图)的快速更新。:遍历每个力场,对于每个力场的 X 和 Y 坐标,分别计算它们加上半径和减去半径的值(左移操作用于防止坐标溢出),并通过。,通过累加左上角到当前点的变化量,计算出每个点的实际力场值,并找到并返回最大的力场值。方法处理差分数组,计算每个点的实际力场值,并找到最大的力场值作为结果返回。方法更新差分数组,记录力场覆盖区域内每一点的力场增加值。原创 2024-03-18 20:26:26 · 963 阅读 · 0 评论 -
LeetCode2024年3月18日每日一题(303. 区域和检索 - 数组不可变)
对于给定的数组,其一维前缀和数组,这是为了方便计算从头开始的区间和。对于所有的。也就是说,存储了的总和。原创 2024-03-18 10:29:05 · 1038 阅读 · 0 评论 -
LeetCode2024年3月17日每日一题(310.最小高度数)(换根DP解法)
换根动态规划(DP)在这个场景中主要是为了找出所有可能的最小高度树的根节点。代码通过两次深度优先搜索(DFS)来实现这一目标。第一次DFS计算每个节点作为根时子树的最大深度,第二次DFS则尝试重新选择每个节点作为根节点,并计算新的树高度。在第一次DFS中计算并存储了每个节点作为根节点时的最大深度,而。及其子树的最大深度。用于存储在考虑根节点更换时各个节点的更新深度。,计算其作为根节点的子树最大深度。在代码中,这一步通过比较。的一个子节点,因此需要根据。的最大和次大子树深度。原创 2024-03-17 15:43:18 · 788 阅读 · 1 评论 -
LeetCode3月17周赛(100255. 成为 K 特殊字符串需要删除的最少字符数)
这个解决方案通过细致地分析字符频率分布,并运用动态规划技术来优化调整过程,有效地找到了将任意字符串转换成k特殊字符串所需的最小删除操作数。这种方法的优势在于它能够在保证结果正确性的同时,最小化所需的操作数量,从而高效解决问题。原创 2024-03-17 14:03:43 · 391 阅读 · 1 评论 -
LeetCode3月17周赛(100236. 统计以给定字符开头和结尾的子字符串总数 )
的值,使用组合数学的原理来计算所有可能的子字符串数量。的子字符串,1表示只有一个单字符子字符串。方法能够高效地计算出包含特定字符。的所有可能子字符串的数量。,因为0表示没有包含字符。这个方法首先计算字符串。原创 2024-03-17 13:54:44 · 427 阅读 · 1 评论 -
LeetCode周赛3月16双周赛(3080. 执行操作标记数组中的元素)
【代码】LeetCode周赛3月16双周赛(3080. 执行操作标记数组中的元素)原创 2024-03-17 13:49:49 · 166 阅读 · 1 评论 -
蓝桥杯(幸运数字)
【代码】蓝桥杯(幸运数字)原创 2024-03-16 20:53:39 · 143 阅读 · 1 评论 -
蓝桥杯JAVA大学省赛A组(6.平均)
(即超过了应该保留的元素数量),就从队列中移除元素并将其值加到总和。方法,它从优先队列中移除并返回队首元素(最小的元素,因为。:由于目标是保持每个分类中的元素数量不超过总数的十分之一(对于每对数字,第一个数字。对象,每个用于存储一组特定分类的整数值。表示分类(假设这里是0到9之间的数字),第二个数字。:对于每个优先队列(每个分类),只要队列的大小大于。中,以确定每个分类队列中应该保留的元素数量。默认是自然排序的,即数字较小的优先级高)。是该分类下的具体值。),计算这个值并存储在。:打印计算得到的总和。原创 2024-03-15 20:28:48 · 206 阅读 · 1 评论 -
LeetCode2024年3月15日每日一题(2312. 卖木头块)
跟踪已计算的状态)来有效解决切割和销售木材以实现最大可能利润的问题。探索将木材切成较小部分的所有可能方式,确保实现最大可能的利润。这段代码使用动态规划和记忆化(在。中缓存中间结果,并使用。原创 2024-03-15 14:17:46 · 655 阅读 · 0 评论 -
LeetCode2024年3月14日每日一题(2789. 合并后数组中的最大元素)
举个例子,如果我们使用单调栈来找到最长的递增子序列,栈中的每个元素都比前一个元素大。单调栈是一种特殊的数据结构,它在算法设计中被广泛使用,尤其是在处理与栈相关的问题时,如括号匹配、最长有效括号子串、最小窗口子串等。单调栈的关键在于它能够利用栈的后进先出(LIFO)特性,以及栈内元素的有序性,来快速定位和解决问题。这种情况下便可以合并,所以我们便选择从后往前遍历这个数组,将其加入到一个单调递增栈中,如果准备入栈的元素比栈顶的元素小,便将两者累加后再加入栈中,反之则直接入栈。一个递减单调栈则是严格递减的。原创 2024-03-14 18:33:02 · 1164 阅读 · 0 评论 -
二维前缀和知识讲解+例题
二维前缀和是一种数组处理技术,它在处理二维数据(如矩阵)时非常有用。它的概念源自于一维前缀和,但扩展到了两个维度。二维前缀和的主要思想是将矩阵中的每个元素与其上方和左方的元素进行累加,从而快速计算出矩阵中任意子矩阵的元素和。定义如下:设有一个二维矩阵A,其大小为m x n,即包含m行和n列。矩阵A的元素表示为A[i][j],其中i表示行索引,j表示列索引。二维前缀和矩阵P也具有相同的大小m x nP[i][j]A[i][j]i = 0j = 0P[i][j]A[i-1][j]A[i][j-1]原创 2024-03-14 17:36:17 · 1174 阅读 · 0 评论