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

力扣 500 和为 K 的子数组

Problem: 560.和为 K 的子数组

思路

前缀和 + 小技巧

解题过程

题目大意可以理解为,让找一个数组中的连续非空子数组的和为k的数量。
这里可以使用前缀和数组suf[]来快速找到符合条件的子数组头和尾。因为一个子数组(i,j)的大小为suf[j] - suf[i-1],因此我们这里只需要找到suf[j] - suf[i-1] = k的两个数,那么题目就变成找到两个数的差为k。那么显而易见可以用哈希来找。
这里有个小技巧,我一开始存储的哈希是把suf[i]和i一起存了,于是变得判断当前的i是否大于哈希找出来的i(因为j>i-1),就得多个查找过程,这样可能会超时,后面发现直接边查边存就不会有这种问题了,这个小技巧适用于查找过程中有下标大小影响的时候,因为ii比当前下班大的下标的数据还未存入,所以这个时候查询只会查找到比当前下标小的数据。

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度:O(n)

Code

class Solution { public int subarraySum(int[] nums, int k) { int len = nums.length; int[] suf = new int[len + 1]; for(int i = 0; i < len; i++) { suf[i + 1] = nums[i] + suf[i]; } Map<Integer,Integer> map = new HashMap<>(); int ans = 0; for(int i = 0; i <= len; i++) { int dif = suf[i] - k; ans += map.getOrDefault(dif, 0); map.merge(suf[i], 1, Integer::sum); } return ans; } }
http://www.cnnetsun.cn/news/27069.html

相关文章:

  • 逻辑回归(Logistic Regression)进行多分类的实战
  • RNN(循环神经网络)原理
  • 人机协同重构创作生态——生成式AI赋能内容产业的变革与思考
  • Java 小白求职者在互联网大厂的面试实录:从 Spring Boot 到微服务架构
  • V助手舆情分析智能体:重塑舆情分析,从“人找信息”到“信息为人”
  • 连接2026:十款远程控制软件真实力横评与选择指南
  • 计算机毕业设计springboot基于Spark++Vue.js的学生管理系统 Spark+Vue 高校学生综合信息管理平台 基于 SpringBoot+Spark+Vue 的全链路学生事务中心
  • JavaScript 集合操作的哈希碰撞:攻击者如何利用特殊 Key 导致 Map/Set 性能降级到 O(N)
  • 为什么 C盘空间会莫名其妙减少(即使没装新软件)?
  • 17、深入理解 Linux 文件系统机制与结构
  • 29、Linux 软件使用与故障排除指南
  • 从入门到转行:网络安全自学与跳槽的终极建议
  • 网络安全小白自学之路,别拜师了,求人不如求己_网络安全小白怎么自学
  • 从系统运维到网络安全工程师,8个月转行真实经验分享!
  • 算法系列(Algorithm)- 快速排序
  • RobotStudio2025全功能授权
  • IsaacLab中UR机械臂与Robotiq夹爪的5大配置难点与解决方案
  • cmark Markdown解析器终极指南:从入门到精通
  • 4-bit量化FLUX模型:让专业AI绘图走进寻常百姓家
  • Excel VBA快速入门:7天从零到精通终极指南
  • AutoHotkey鼠标轨迹自动化终极指南:从零开始实现精准操作回放
  • UxPlay 终极指南:在 Linux 系统上实现 AirPlay 镜像的完整教程
  • 1-2 惜败!国安亚冠连败 中超 16 强魔咒难破
  • 一键解锁阅读3.0书源终极合集:1629个精品资源任你选
  • 一般人不懂Windows
  • Java 基于多线程机制的专项实验
  • 51、Linux 系统中 shell 环境管理与脚本编写全解析
  • 53、编写高效 Shell 脚本:从基础到实践
  • 解锁共享单车数据:从入门到精通的完整分析指南
  • KOOM:如何快速解决Android应用内存泄漏的终极方案