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

子串:和为K的子数组

题目描述:给定一个整型数组和一个k,返回和为K的子数组(连续非空)的个数。

示例 1:

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

示例 2:

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


求解思路1:枚举法

枚举所有子串,在找所有子串的过程中统计和为k的子串个数。

时间复杂度:O(n^2)

空间复杂度:O(1)

class Solution {public int subarraySum(int[] nums, int k) {int result = 0;// 子数组[left.....right]for (int left = 0; left < nums.length; left++) {int sum = 0;for (int right = left; right >= 0; right--) {sum += nums[right];if (sum == k) {result++;}}}return result;}
}

求解思路2:前缀和+哈希。分析如下:

假设,数组nums为:[4,1,5,2]

则前缀和preSum为:[4,5,10,12]

preSum[0]=nums[0]

preSum[1]=preSum[0]+nums[1]

preSum[2]=preSum[1]+nums[2]

preSum[3]=preSum[2]+nums[3]

有了前缀和,又因为k为某个子数组的和,那么我们可以得出下图结果:

所以题目就可以转换为:求解有几个preSum[j]。

时间复杂度:O(n)

空间复杂度:O(n)

class Solution {public int subarraySum(int[] nums, int k) {int result = 0;int preSum = 0;// preSumAndCountMap维护前缀和和前缀和出现的次数HashMap<Integer, Integer> preSumAndCountMap = new HashMap<>();// 初始化前缀和为0的次数为1preSumAndCountMap.put(0, 1);for (int i = 0; i < nums.length; i++) {preSum = preSum + nums[i];// 寻找一下是否有符合条件的if (preSumAndCountMap.containsKey(preSum - k)) {result = result + preSumAndCountMap.get(preSum - k);}// map表里记录一下int count = preSumAndCountMap.getOrDefault(preSum, 0);preSumAndCountMap.put(preSum, count + 1);}return result;}
}

练习地址:560. 和为 K 的子数组 - 力扣(LeetCode)

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

相关文章:

  • 记一个Mudbus TCP 帮助类
  • from中烟科技翼支付 面试题1
  • 财报出炉,李宁也被“靠边站”了
  • 摄像头模块的技术原理
  • WeakAuras Lua Script (My Version)
  • 【Lua】题目小练11
  • 红黑树下探玄机:C++ setmultiset 的幕后之旅
  • 无线网络中的Duration字段计算:原理、机制与实现
  • 深入了解linux系统—— 线程封装
  • 【prism】Prism 弹窗在 ViewModel 中控制大小的实践总结
  • 视觉工具:文字显示、图像标注与多模板匹配
  • 「大模型学习」(15)Prompt Tuning → P-Tuning v1 → P-Tuning v2
  • STM32G4 SVPWM VF开环强拖电机
  • 两周年创作纪念,忆笑傲江湖岁月
  • 【生产实践】局域网多服务器多用户SSH登录批量测试(附完整shell脚本)
  • Linux-服务器初始化
  • 【智能化解决方案】大模型智能推荐选型系统方案设计
  • week5-[字符数组]查找
  • GD32VW553-IOT开发板测评 搭建环境到电灯(QA分享)
  • Element中table组件(el-table)右侧滚动条空白占位gutter处理
  • vue3和react的异同点
  • Tesseract OCR之基线拟合和单词检测
  • 从0开始学习Java+AI知识点总结-26.web实战(Springboot原理)
  • Linux服务器安全配置与NTP时间同步
  • 【Python系列】Flask 和 FastAPI对比
  • 【深度学习新浪潮】SAM 2实战:Meta新一代视频分割模型的实时应用与Python实现
  • Boris FX Samplitude Suite 2025.0.0 音频录制/编辑和母带处理
  • springcloud篇5-微服务保护(Sentinel)
  • 数字IC前端设计——前仿篇(VCS,DVE,Verdi)
  • 企业级集群部署gpmall商城:MyCat+ZooKeeper+Kafka 环境部署与商城应用上线流程