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

http://www.dtcms.com/a/151255.html

相关文章:

  • 熊海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历史服务器,轻松查看任务记录
  • 算法训练营第一天|704.二分查找、27.移除元素、977.有序数组的平方
  • 【哈希表】1399. 统计最大组的数目
  • Java学习手册:Web 安全基础
  • 【KWDB 创作者计划】_上位机知识篇---MicroPython
  • 青少年编程与数学 02-018 C++数据结构与算法 06课题、树
  • Kairos 生态有哪些值得关注的进展?
  • 搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
  • Linux:进程地址空间
  • 基于Python将MongoDB文本数据通过text2vec-large-chinese模型向量化并存储到Milvus数据库的完整实现方案
  • 20、 DeepSeekMoE论文笔记