当前位置: 首页 > 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;
}

http://www.xdnf.cn/news/526699.html

相关文章:

  • 光纤克尔非线性效应及其在光通信系统中的补偿教程-3.2 克尔效应
  • 分布式与集群:概念、区别与协同
  • 没有 Mac,我如何用 Appuploader 完成 iOS App 上架
  • RabbitMQ的简介
  • React集成百度【JSAPI Three】教程(002):设置不同的环境效果
  • 数据结构(二) 线性表
  • java中的Servlet4.x详解
  • 湖北理元理律师事务所观察:债务服务中的“倾听者价值”
  • 深入解析Spring Boot与Kafka集成:构建高效消息驱动微服务
  • APP小程序抓包和下游代理
  • 云原生攻防2(Docker基础补充)
  • 2.微服务-配置
  • Fines for Parking vs. Free News
  • 云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(下)
  • Kotlin 协程
  • MySQL故障排查
  • 高效掌握二分查找:从基础到进阶
  • LED太阳光模拟器与氙灯太阳光模拟器的性能区别
  • Protobuf协议生成和使用
  • 5G金融互联:迈向未来金融服务的极速与智能新时代
  • 判断三方库是64位还是32位
  • CVE-2015-3934 Fiyo CMS SQL注入
  • 代码随想录算法训练营Day37 | 完全背包基础理论 518. 零钱兑换II 377. 组合总和Ⅳ 57. 爬楼梯(第八期模拟笔试)
  • 网络协议之一根网线就能连接两台电脑?
  • Spring boot 学习笔记2
  • 易境通海外仓系统:一件代发全场景数字化解决方案
  • MySQL函数触发:函数处理与触发器自动化应用
  • 【Web渗透】DVWA搭建详细教程
  • NLP学习路线图(一): 线性代数(矩阵运算、特征值分解等)
  • MATLAB中islogical函数用法