![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
精选
文章平均质量分 62
精选
sjsjs11
这个作者很懒,什么都没留下…
展开
-
【0-1背包hard】力扣3181. 执行操作可获得的最大总奖励 II
如果 rewardValues[i] 大于 你当前的总奖励 x,则将 rewardValues[i] 加到 x 上(即 x = x + rewardValues[i]),并 标记 下标 i。接下来定义一个bitset,他的大小由题目条件限制可以得出,由于bitset最右边是第0个比特位,要初始化为1,所以bitset的大小就是100000。的作用就是将>=v的比特位置0,然后更新f的时候,要包含两种情况,一种是不选择v,则f和之前一样,如果选择v,那么就将低v位向左移动v位,然后取或。原创 2024-08-31 11:37:20 · 202 阅读 · 0 评论 -
【0-1背包】力扣416. 分割等和子集
我们会检查 dp[11] 是否可以由 dp[11-5] 转化而来,即 dp[6] 如果为 true,那么 dp[11] 也可以变为 true。类似地,dp[6] 可以由 dp[6-5] = dp[1] 转化而来。接着计算出总和sum和最大的元素maxNum,当sum是奇数的时候,返回false,当最大元素大于sum / 2的时候,也返回false。使用或运算,dp[j] 中的 j 代表的是当前要检查的子集和,也就是在给定的数组中,是否可以找到一个子集,使得这个子集的元素和等于 j。原创 2024-08-28 00:07:31 · 223 阅读 · 0 评论 -
【0-1背包】力扣2915. 和为目标值的最长子序列的长度
解释:总共有 5 个子序列的和为 7 :[4,3] ,[4,1,2] ,[4,2,1] ,[1,1,5] 和 [1,3,2,1]。解释:总共有 3 个子序列的和为 9 :[4,5] ,[1,3,5] 和 [2,3,4]。最长的子序列是 [1,3,5] 和 [2,3,4]。输入:nums = [4,1,3,2,1,5], target = 7。输入:nums = [1,2,3,4,5], target = 9。输入:nums = [1,1,5,4,5], target = 3。原创 2024-08-27 15:37:57 · 291 阅读 · 0 评论 -
【动态规划】【hard】力扣1301. 最大得分的路径数目
如果比较的格子最大得分大小比他大,那么就更新当前网格,如果得分等于比较的格子的话,那么就将路径数量+1,假设如果数量加一后,遇到另一个比较的格子比他大,那么又会更新成那个格子的dp(无论是得分还是路径数量)。, 9 或者障碍 ‘X’。更新完了后,就要加上自身的得分,首先要判断是不是终点E,如果是的话,就加上0,不然的话就加上自身得分,由于是字符串,所以要减去’0’,才能得到整型。最后返回终点E的dp,如果得分是-1,说明没有路径可以到达,返回{0,0},否则就返回他的最大得分和路径和。原创 2024-08-27 00:28:17 · 856 阅读 · 0 评论 -
【数据结构-前缀异或和】力扣1177. 构建回文串检测
输入:s = “abcda”, queries = [[3,3,0],[1,2,0],[0,3,1],[0,3,2],[0,4,1]]如果count[l]某个字符是奇数个(1),那么如果count[r]该字符是奇数个(1),说明子段为偶数个(0)如果count[l]某个字符是奇数个(1),那么如果count[r]该字符是偶数个(0),说明子段是奇数个(1)如果count[l]某个字符是偶数个(0),那么如果count[r]该字符是奇数个(1),说明子段是奇数个(1),其中 n 是字符串 s 的长度。原创 2024-08-22 16:41:57 · 936 阅读 · 0 评论 -
【数据结构-距离和】力扣2615. 等值距离和
i = 0 ,nums[0] == nums[2] 且 nums[0] == nums[3]。因此,arr[0] = |0 - 2| + |0 - 3| = 5。i = 2 ,nums[2] == nums[0] 且 nums[2] == nums[3]。因此,arr[2] = |2 - 0| + |2 - 3| = 3。i = 3 ,nums[3] == nums[0] 且 nums[3] == nums[2]。因此,arr[3] = |3 - 0| + |3 - 2| = 4。原创 2024-08-21 11:50:13 · 763 阅读 · 0 评论 -
【数据结构-前缀异或和】1442. 形成两个异或相等数组的三元组数目
首先第一个哈希表cnt是用来在遍历k,计算k+1的前缀异或和的时候,是否有对应的 i 的前缀异或和一样。那么在遍历 k 的时候,就可以根据当前的前缀异或和来查找之前相同前缀异或和的个数cnt[s ^ val]。解释:满足题意的三元组分别是 (0,1,2), (0,2,2), (2,3,4) 以及 (2,4,4)输入:arr = [7,11,12,9,5,2,7,17,22]输入:arr = [2,3,1,6,7]输入:arr = [1,1,1,1,1]输入:arr = [1,3,5,7,9]原创 2024-08-20 12:04:32 · 476 阅读 · 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 · 222 阅读 · 0 评论 -
【数据结构-哈希前缀】力扣1590. 使数组和能被 P 整除
的结果是否储存在哈希表中,如果有的话,由于哈希表值储存的是对应下标,且如果出现相同键会进行更新,以最新也就是最右边的键为准,满足题意最短子段,所以可以通过当前数组下标减去对应哈希表中储存的值然后+1即可。这个等式意味着子段和 mod p的结果与nums全部元素和 mod p的结果一样,这时候说明减去这个子段,剩下子段刚好可以被p整除。解释:我们无法移除任何一个元素使得和被 9 整除,最优方案是移除子数组 [5,2] ,剩余元素为 [6,3],和为 9。输入:nums = [1,2,3], p = 3。原创 2024-08-16 17:37:46 · 352 阅读 · 0 评论 -
【hard】【数据结构-前缀哈希】力扣2488. 统计中位数为 K 的子数组
当i在k右边的时候,在哈希表中查找是否有对应的前缀和,如果找到了,说明存在以k为中位数的子段,而且该子段元素是奇数个。然后再查找是否有sum-1这个前缀和,如果找到了,说明存在以k为中位数的子段,而且该子段元素是偶数个。例如,[2,3,1,4] 的中位数是 2 ,[8,4,3,5,1] 的中位数是 4。解释:中位数等于 4 的子数组有:[4]、[4,5] 和 [1,4,5]。将大于k的值转换成1,小于k的值转换成-1,然后等于k的值等于0。输入:nums = [3,2,1,4,5], k = 4。原创 2024-08-14 15:41:10 · 767 阅读 · 0 评论 -
【数据结构-前缀哈希】力扣3026. 最大好子数组和
并且我们要让符合条件的子段和尽可能大,所以nums[i]的前缀和要尽可能小,所以在储存nums[i]的前缀和的时候,如果有比他小的前缀和,就将哈希表中对应的值替换成最小的前缀和。好子数组有 [1,2] ,[2,3] ,[3,4] ,[4,5] 和 [5,6]。好子数组有 [-1,-2,-3] 和 [-2,-3,-4]。需要注意的是,在解法2中,另前缀和s[0] = 0,这也意味着这次子段和的计算方式不是s[j] - s[i-1],而是s[j+1] - s[i],也就是前缀和的索引方式整体往右挪了一位。原创 2024-08-09 15:06:52 · 509 阅读 · 0 评论 -
【数据结构-前缀和】【二进制】力扣.2438. 二的幂数组中查询范围内的乘积
同时给你一个下标从 0 开始的二维整数数组 queries ,其中 queries[i] = [lefti, righti] ,其中 queries[i] 表示请你求出满足 lefti原创 2024-07-25 10:28:08 · 506 阅读 · 0 评论 -
【数据结构-前缀&&哈希&&同余运算】力扣974. 和可被 K 整除的子数组
由于在C++中,余数的符号和被除数相同,这种行为不符合模运算在数学上的严格定义。给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的非空 子数组 的数目。在遍历nums的过程中,计算以该num结尾的能被k整除的子段和数量加到ans中,最后返回ans。输入:nums = [4,5,0,-2,-3,1], k = 5。设P为前缀和,想要找出能被k整除的子段和,即。输入: nums = [5], k = 9。子数组 是数组中 连续 的部分。, 根据同余定理,也就是。原创 2024-08-01 11:47:40 · 304 阅读 · 0 评论 -
【动态规划-Kadane】【贪心】【线段树数据结构&&分治】力扣53.最大子数组和
mSum表示 [l,r] 内的最大子段和,这时候有三种情况,一种是他的左子节点的mSum等于他的mSum,第二种是他的右子节点的mSum等于他的mSum,第三种是从m的两边都取元素作为子段元素,这时他的mSum = 左子节点的rSum + 右子节点的lSum,将三者进行比较,取最大值返回就是题目的解。lSum:线段树节点以l为左端点的最大子段和,这时候有两种情况,一种是左子节点的lSum,也就是右子节点的lSum为负数成分较大的时候,左子节点的lSum一般就是该节点的lSum。是数组中的一个连续部分。原创 2024-07-29 15:00:05 · 1658 阅读 · 0 评论 -
【记忆化搜索】【超详细】力扣3186. 施咒的最大总伤害
在实际递归的运算过程中,采用的是深度优先遍历,也就是计算{4,1}的res需要第二层的{3,1}和{1,2}都返回给它一个值,他会先看{3,1}有没有返回给它一个值,发现{3,1}没有返回给它一个值,他就会计算{3,1}的两个子节点的返回值来计算{3,1}的值是多少,他就会先看第三层{1,2}有没有返回给他一个值,发现也没有,就会去计算第三层{1,2}的两个子节点的返回值来计算{1,2}的值,由于第三层的{1,2}是第一个元素了,所以他的两个子节点都只能返回它0。这个标题,就能理解了。原创 2024-07-26 17:47:26 · 885 阅读 · 0 评论