2026/1/26 2:49:45
网站建设
项目流程
网站开发文档源码,个人网站建设作用,微信营销软件app,免费的seo网站题目废话少说#xff0c;直接看题目#xff0c;首先理解一下题意#xff0c;子数组的要求是数组中元素的连续非空序列。在示例1中#xff0c;就是下标0#xff0c;1和下标1#xff0c;2这两个子数组。然后是示例2#xff0c;下标0#xff0c;1是显然的#xff0c;我看…题目废话少说直接看题目首先理解一下题意子数组的要求是数组中元素的连续非空序列。在示例1中就是下标01和下标12这两个子数组。然后是示例2下标01是显然的我看了好久都没找到第二个在哪问了ai才知道下标2就是一个子数组不知道有没有和我一样的人哭笑不得思路帮大家试过二重循坏暴力解法了过不去熟悉的人肯定知道这题考察的是前缀和但是别急先让我们看看前缀和的基本原理。对一个元素序列34566767。当我们要求下标2到下标4闭区间的和时我们应该怎么做注意到公式下标0到下标4闭区间的和减去从下标0到下标1闭区间的和即为所求。这就是前缀和的基本原理线性遍历得到前缀和通过不同下标的前缀和相减得到任意区间的和符合空间换时间的思想。前缀和基本公式下标闭区间LR的区间和R的前缀和减去L-1的前缀和看了一些视频感觉前缀和的理解有多种有些前缀和好像是开区间的整体思路是一样的这里我采用闭区间的思路代码class Solution { public: int subarraySum(vectorint nums, int k) { unordered_map int,int map;//key为前缀和value为这个前缀和出现的次数 map[0]1;//这个要特别注意下文有解释 int pre_sum0; int res0; for(int i0;inums.size();i){ pre_sumnums[i]; if(map.find(pre_sum-k)!map.end()) resmap[pre_sum-k]; map[pre_sum]; } return res; } };这个代码里面的注释咋改颜色啊根本看不清啊考虑如下序列1。给定的k也为1。按照代码逻辑此时寻找map中是否存在key,使其等于pre_sum-k即1-1即0如果代码中没有设置map[0]1的话就漏解了。接下来要思考为啥有这个特殊情况难道上面的思路有问题根据公式想要计算下标0到下标0的闭区间的和需要用下标0的前缀和减去“下标-1”的前缀和所以咱们的思路没问题。碎碎念最近懈怠了十几天罪过罪过明天继续努力