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

10 和为k的子数组

给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数

子数组是数组中元素的连续非空序列。

示例 1:

输入:nums = [1,1,1], k = 2输出:2

示例 2:

输入:nums = [1,2,3], k = 3输出:2

提示:

  • 1 <= nums.length <= 2 * 104
  • -1000 <= nums[i] <= 1000
  • -107 <= k <= 107
思路1

滑动窗口

1、检查参数的合法性

2、循环数组nums,从0到nums.size()-1,记下标为i,定义满足次数的变量_count=0。

3、循环下标i到0的累加和,nums[i]+nums[i-1]、nums[i]+nums[i-1]+nums[i-2]....... nums[i+nums[i-1]+nums[i-2]+nums[0]。判断累加和是否有满足和等于k的。

4、满足条件k+1,不满足条件忽略,最后返回_count。

class Solution { public: int subarraySum(vector<int>& nums, int k) { if(nums.empty()) return 0; int _count=0; for(int i=0;i<nums.size();i++){ int _sum=0; for(int j=i;j>=0;j--){ _sum+=nums[j]; if(_sum==k) _count++; } } return _count; } }; //写法2 class Solution { public: int subarraySum(vector<int>& nums, int k) { int n=nums.size(); if(n==0) return 0; int _ans=0; for(int i=0;i<n;i++){ int _sum=0; for(int j=i;j<n;j++){ _sum+=nums[j]; if(_sum==k) _ans++; } } return _ans; } };
思路2

官方解法我们定义 pre[i] 为 [0..i] 里所有数的和,则 pre[i] 可以由 pre[i−1] 递推而来,即:

pre[i]=pre[i−1]+nums[i] 那么「[j..i] 这个子数组和为 k 这个条件我们可以转化为

pre[i]−pre[j−1]==k 简单移项可得符合条件的下标 j 需要满足

pre[j−1]==pre[i]−k

步骤

1、检查参数的合法性,定义一个hash表,key是pre[i],value是出现的次数。

2、循环数组nums,计算每一个的pre[i],然后查找hash表中是否存在k-pre[i]这个值,

3、若存在,则count++,若不存在则跳过。

4、把pre[i]插入hash表中。

5、循环结束,返回count。

class Solution { public: int subarraySum(vector<int>& nums, int k) { if(nums.empty()) return 0; unordered_map<int,int> hash; int _count=0; int _sum=0; hash[0]=1; for(int i=0;i<nums.size();i++) { _sum+=nums[i]; unordered_map<int,int>::iterator it=hash.find(_sum-k); if(it==hash.end()){ hash[_sum]++; continue; } _count+=hash[_sum-k]; hash[_sum]++; } return _count; } };

推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:链接

http://www.jsqmd.com/news/1261748/

相关文章:

  • 对比直接使用官方 API,通过 Taotoken 聚合调用的延迟体感差异
  • 谷歌下重手!Chrome浏览器迎来“大洗牌”,你的隐私终于有人管了?
  • 泉盛UV-K5/K6对讲机终极改造指南:解锁专业通信的完整教程
  • 终极指南:如何快速获取国家中小学智慧教育平台的电子教材资源
  • AI应用产品化阶段如何利用Taotoken实现模型选型与成本优化
  • 认识容器:从一个 nginx 容器看透 Namespace 与 Cgroup
  • KV Cache Offloading优化LLM推理显存占用
  • 2026每逢下雨屋内渗水怎么办?黄山顶楼、外墙漏水根治技巧 - 宅安选房屋修缮
  • 羽毛球学习 HarmonyOS 设计续篇(25):搜索列表性能与回到顶部策略
  • 内容创作团队如何借助Taotoken调用不同风格模型生成多样化文案
  • AI Agent实战:从零构建生产级智能体的完整指南
  • ComfyUI-WanVideoWrapper高级配置与性能优化实战指南
  • Win32 C++集成librdkafka实战:从编译到生产消费完整指南
  • 告别英文恐惧!3分钟让Figma说中文,设计师的母语工作流指南
  • 在OpenClaw项目中集成Taotoken作为AI能力供应商
  • 零基础也能上手:Ubuntu 24.04 云服务器 Python 开发环境从零搭建
  • 手机AI Agent技术路径解析:激进派与稳健派的博弈与未来
  • 30分钟利用AI Codex高效撰写发明专利草案:从技术构思到结构化文档
  • 深度解析G-Helper:华硕笔记本硬件控制系统的轻量化架构设计
  • 视频怎么转文字?2026 视频转文字工具最新推荐,电脑手机 APP 实测汇总! - AI工具助手
  • AI工具提升学术写作效率与质量全攻略
  • 抖音批量下载神器:5分钟打造你的专属视频库,无水印收藏从此简单
  • Honey Select 2汉化补丁终极指南:15分钟实现完美中文游戏体验
  • 【AI任务调度黄金法则】:20年架构师亲授5大优先级排序模型与实时决策框架
  • 如何轻松下载B站大会员4K视频:免费开源工具完整指南
  • B站缓存视频转换完整指南:5秒解锁m4s格式的终极解决方案
  • 5步精通FanControl:打造Windows智能散热系统的完整指南
  • Godot引擎深度解析:从节点场景系统到2D游戏开发实战
  • HarmonyOS应用实战-启示散页-32-快捷抽取入口别绕过服务:把外部 Want 参数接回统一抽取链路
  • 深入解析TMS570LS3137-EP时钟系统:从PLL配置到安全监控的嵌入式设计指南