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

560. 和为 K 的子数组(java)

个人理解:前缀和+哈希表的应用

首先,要求的是连续的子数组,故可以想到前缀和数组:sum[i]-sum[j]=k  那么[i,j]就是一个子数组

sum[i]表示 [0-i] 的和,对于前缀和数组,sum[0]=0 ;前缀和数组长度为原数组长度+1

变换后:sum[j]=sum[i]-k  寻找等于k的数组,等价于寻找sum[j]的个数。所以可以用哈希表来记录sum[j]出现的次数。

class Solution {public int subarraySum(int[] nums, int k) {// 计算前缀和Map<Integer,Integer> hs =new HashMap<>();  // 用哈希集合保存前缀和出现的次数int count=0;int lenN=nums.length;int[] preSum=new int[lenN+1];  // 创建数组保存前缀和preSum[0]=0;int i =1;// 计算得到前缀和数组for(int num:nums){preSum[i]=preSum[i-1]+num;i++;}// 遍历前缀和数组for(int num:preSum){if(hs.containsKey(num-k)){   // preSum[i]-preSum[j]=k  说明当前num是符合的count+=hs.get(num-k);    // 获取键对应的值}hs.put(num,hs.getOrDefault(num,0)+1);   // 获取num键的值,没有则返回0。存入的是当前num的数量}return count;}
}

相关文章:

  • 熊海CMS Cookie脆弱
  • linux系统调用
  • springmvc入门案例
  • 【编译原理】第三章 习题
  • React 5 种组件提取思路与实践
  • UIAutomator 与 Playwright 在 AI 自动化中的界面修改对比
  • IP-guard离线卸载客户端及清除策略说明
  • 基于Python Socket的多线程聊天程序实现
  • pod内部共享命名空间与k8s命名空间是一个东西吗?
  • Podman Desktop:现代轻量容器管理利器(Podman与Docker)
  • Vmware安装centos7和Redis
  • kafka安装、spark安装
  • 概率dp总结
  • LangChain Runnable简介
  • 黑马点评redis改 part 5
  • C++ STL 容器简介(蓝桥杯适用精简版)
  • docker底层原理简述
  • 开源版「v0」OpenUI:根据文本生成UI界面代码
  • 读书笔记:淘宝十年产品与技术演进史
  • 配置Spark历史服务器,轻松查看任务记录
  • “彩虹滑道”项目两男童相撞飞跌出去,景区:工作人员误判导致
  • 对华小额包裹免税取消=更高价格+更慢物流,美消费者为关税政策买单
  • 购车补贴、“谷子”消费、特色产品,这些活动亮相五五购物节
  • 山西太原一小区发生爆炸,造成1人遇难21人受伤2人失联
  • 国务院安委办、应急管理部进一步调度部署“五一”假期安全防范工作
  • 白玉兰奖征片综述丨国产剧集创作的此消彼长