
待完善
文章平均质量分 57
hlc@
这个作者很懒,什么都没留下…
展开
-
【单调栈】力扣1130. 叶值的最小代价生成树
在所有这样的二叉树中,返回每个非叶节点的值的最小可能总和。解释:有两种可能的树,第一种的非叶节点的总和为 36 ,第二种非叶节点的总和为 32。最高效的O(n)做法,从凌晨12点做到凌晨三点半,还是没想通,以后补题解。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。每个非叶节点的值等于其左子树和右子树中叶节点的最大值的乘积。如果一个节点有 0 个子节点,那么该节点为叶节点。每个节点都有 0 个或是 2 个子节点。输入:arr = [6,2,4]输入:arr = [4,11]原创 2025-01-17 03:32:32 · 231 阅读 · 0 评论 -
【多维DP】【准NOI难度】力扣3251. 单调数组对的数目 II
首先由于arr1是非递减的,那么也就是说arr1[i] >= arr1[i-1],然后arr2是非递增的,也就是说arr2[i] <= arr2[i-1]。我们假设arr1[i]为j,arr1[i-1]为k,arr2[i] = nums[i] - j而arr2[i-1] = nums[i-1] - k。那么我们知道了最大值k,我们就可以知道当前f[i][j]可以由f[i-1][0],f[i-1][1]…+f[i-1][k]的值,我们可以计算上一个状态的前缀和,当我们知道最大的k的时候就可以直接使用。原创 2024-12-21 16:12:29 · 715 阅读 · 0 评论 -
【动态规划-最长递增子序列(LIS)】力扣2826. 将三个组排序
一开始我们得到g=[1,2,4,5],然后遇到x=3,替换后g=[1,2,3,5],这时候g就是虚拟的递增子序列,因为很明显nums中没有这么一个递增子序列。接着遇到x=4,替换掉g中的5,g=[1,2,3,4,7]。最后遇到x=6,替换掉了g中的最后一个元素7,g=[1,2,3,4,6],这时候我们的最长子序列才真正变成了[1,2,3,4,6]。举个例子:nums = [1,2,4,5,3,7,4,6]输入:nums = [1,3,2,1,3,3]输入:nums = [2,2,2,2,3,3]原创 2024-10-09 17:32:19 · 856 阅读 · 0 评论 -
【动态规划-最长递增子序列(LIS)】力扣673.最长递增子序列的个数
就说明发现了更长的公共子序列,那么这个时候,我们就重置count[i]为count[j],之所以重置为count[j]是因为count[j]代表着之前以nums[j]结尾的最长公共递增子序列的个数,那么有count[j]个最长公共递增子序列再加上当前的nums[i],就有count[j]种以nums[i]结尾的最长公共递增子序列。然后再继续遍历以nums[i]结尾的最长公共递增子序列,如果发现了有相同长度的公共递增子序列,就加上这个以nums[j]结尾的最长公共子序列的数量count[j]。原创 2024-10-09 01:00:41 · 307 阅读 · 0 评论 -
【数据结构-二维前缀和】力扣1504. 统计全 1 子矩形
既然右下角顶点已经确定,假设当矩形的高也知道,那么顶边的长度就是符合右下角为顶点,高确定的矩形个数。所以我们要做的就是遍历矩阵每个元素为矩形右下角,然后在不断假设高,然后找到在不同高的情况下矩形的顶边最长是多少。我们将每个元素为右下角能构成的矩形数量都计入ans中,最后返回的ans就是所有符合要求全为1的子矩阵数量。输入:mat = [[0,1,1,0],[0,1,1,1],[1,1,1,0]]输入:mat = [[1,0,1],[1,1,0],[1,1,0]]有 2 个 1x3 的子矩形。原创 2024-09-06 13:52:51 · 737 阅读 · 0 评论 -
【数据结构-哈希&&前缀】【滑动窗口】力扣930.和相同的二元子数组
在这个算法中,举个例子[1,0,1,0,1]作为我们的nums,goal = 2。cnt是一个哈希表,用来储存子数组相同的和的数量。给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal 的 非空 子数组。有 4 个满足题目要求的子数组:[1,0,1]、[1,0,1,0]、[0,1,0,1]、[1,0,1]输入:nums = [1,0,1,0,1], goal = 2。输入:nums = [0,0,0,0,0], goal = 0。有以上四种情况,所以输出为4。原创 2024-07-30 10:53:43 · 266 阅读 · 0 评论