当前位置: 首页 > news >正文

前缀和——和为K的子数组

作者感觉本题稍稍有点难度,看了题解也思考了有一会TWT

显然,暴力我们是不可取的,但这里我们可以采取一种新的遍历数组形式,从后向前,也就是以i位置为结尾的所有子数组,这个子数组只统计i位置之前的。

然后,问题就转换成了,我们要找到以i位置为结尾的所有子数组,且在[0,i-1]内,有多少个前缀和为sum[i]-k,

这里可能会有一个疑问,为什么和为k的数组都是以i位置为结尾的,就没有别的情况也符合比如下图

如果你对此有疑问,说明我们需要再看一下以i为结尾的所有数组为什么能有遍历所有数组的效果。如果我们正着看,就是0位置从前向后遍历,然后0开始的遍历完再从以1位置为开始的遍历,在我们本题中的遍历方法,无非就是把i作为了结尾,然后从右向左,也可以实现枚举所有子数组。

因此,如果上面的成立,一定在此之前就已经被统计过了。

还有一个细节,如果整个sum[i]=k怎么办?也就是说我们的sum[i]-k=0也算是成立的(前缀和为0)此时我们要定义一个hash,并令hash[0]=1;

最后,我们还要考虑一下每一次的前缀和什么时候放进表中,不能统计完就直接进,而是当移动一个位置时先判断是否有符合的再放入(防止重复)。

int Solution(vector<int> nums,int k)
{unordered_map<int,int>hash;hash[0]=1;int sum=0,ret=0;for(auto x:nums){sum+=x;if(hash.count(sum-k) ret+=hash[sum-k];hash[sum]++;//先判断再放入}return ret;
}

相关文章:

  • 【Unity网络编程知识】Unity的 WWW相关类学习
  • 基础深度补全模型DepthLab: From Partial to Complete
  • Python训练第三十天
  • mybtais plus使用拦截器打印完整SQL语句
  • 深入探讨死区生成:原理、实现与应用
  • MIMO 检测(6)--最大似然检测(1)
  • 基于SpringBoot的小型民营加油站管理系统
  • 2025年—ComfyUI_关于ComfyUI的零碎小知识
  • unity UGUI虚线框shader
  • C++--综合应用-演讲比赛项目
  • 10、底层注解-@Conditional条件装配
  • python可视化:公积金与商业贷款利率历年趋势1
  • 客户体验数据使用的三种视角——旅程视角
  • 升级mysql (rpm安装)
  • 【java第14集】java访问修饰符详解
  • HashMap 的特点及应用场景
  • 洛谷B3876—— [信息与未来 2015] 中间值
  • Java知识点-Stream流
  • UE5在Blueprint中判断不同平台
  • MySQL如何快速删除数据库中所有表数据
  • 存款利率、LPR同日下调,机构称对银行的影响偏正面
  • 媒体评教师拎起学生威胁要扔下三楼:师风师德不能“悬空”
  • 被围观的“英之园”,谁建了潮汕天价违建?
  • 一箭六星,朱雀二号改进型遥二运载火箭发射成功
  • 俄媒:俄乌伊斯坦布尔谈判将于北京时间今天17时30分开始
  • 李峰已任上海青浦区委常委