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

LeetCode - 560. 和为 K 的子数组

目录

题目

为什么前缀和+哈希表能找到所有和为K的子数组

正确写法

复杂度分析


题目

560. 和为 K 的子数组 - 力扣(LeetCode)

解题思路有两种主要方法:

  • 暴力法:检查所有可能的子数组,计算它们的和,统计等于k的子数组数量
  • 前缀和 + 哈希表:使用前缀和和哈希表来优化,这是最优解

为什么前缀和+哈希表能找到所有和为K的子数组

 前缀和的本质

前缀和sum[i]表示从数组开始到第i个元素的总和:

  • sum[0] = 0(空数组的和)
  • sum[1] = nums[0]
  • sum[2] = nums[0] + nums[1]
  • ...
  • sum[i] = nums[0] + nums[1] + ... + nums[i-1]

子数组和的计算

对于任意子数组nums[i...j](从索引i到j),其和可以表示为:

nums[i] + nums[i+1] + ... + nums[j] = sum[j+1] - sum[i]

 如何找到所有和为K的子数组

我们要找的是所有满足sum[j+1] - sum[i] = k的(i,j)对,等价于寻找所有满足sum[i] = sum[j+1] - k的(i,j)对。

算法的关键步骤:

  • 遍历数组,对于每个位置j,计算当前的前缀和sum[j+1]
  • 查找是否存在之前的前缀和等于sum[j+1] - k
  • 如果存在,说明从那些前缀和对应的位置到当前位置j的子数组和为k

正确写法

class Solution {
public:int subarraySum(vector<int>& nums, int k) {int count = 0;int sum = 0;unordered_map<int, int> prefixSum;  // 前缀和 -> 出现次数// 初始化:空子数组的前缀和为0,出现1次prefixSum[0] = 1;for (int num : nums) {// 累加当前前缀和sum += num;// 如果存在一个前缀和为(sum-k),说明存在一个子数组的和为kif (prefixSum.find(sum - k) != prefixSum.end()) {count += prefixSum[sum - k];}// 更新当前前缀和的出现次数prefixSum[sum]++;}return count;}
};

复杂度分析

  • 时间复杂度:O(n),其中n是数组长度,我们只需要遍历数组一次
  • 空间复杂度:O(n),最坏情况下哈希表需要存储n个不同的前缀和
http://www.xdnf.cn/news/932725.html

相关文章:

  • 持续交付的进化:从DevOps到AI驱动的IT新动能
  • 博图 SCL 编程技巧:灵活实现上升沿与下降沿检测案例分享(上)
  • Bootstrap 5学习教程,从入门到精通,Bootstrap 5 图像形状(Image Shapes)语法知识点及案例代码(8)
  • 基于 Transformer robert的情感分类任务实践总结之三——FGM
  • 从代码学习深度强化学习 - 多臂老虎机 PyTorch版
  • 【深度学习|学习笔记】自监督学习(Self-Supervised Learning, SSL)在遥感领域中的典型应用案例及其在小样本学习中的作用,附代码。
  • LeetCode --- 452周赛
  • 高保真组件库:按钮
  • GitHub 趋势日报 (2025年06月07日)
  • Langgraph实战-自省式RAG: Self-RAG
  • 材料力学速通
  • 北京工作周期7,8,9,10
  • 【react实战】如何实现监听窗口大小变化
  • 2025HNCTF - Crypto
  • webstorm 配置Eslint
  • Springboot 基于MessageSource配置国际化
  • C#调用Rust动态链接库DLL的案例
  • ​RBAC(基于角色的访问控制)权限管理详解
  • 学习日记-day24-6.8
  • 鸿蒙API自翻译
  • 70常用控件_QVBoxLayout的使用
  • 指针的使用——字符、字符串、字符串数组(char*)
  • C++进阶--C++11--智能指针(重点)
  • 12.7Swing控件6 JList
  • gitcode与github加速计划
  • LabVIEW Modbus 主站冗余控制
  • css | class中 ‘.‘ 和 ‘:‘ 的使用 | 如,何时用 .is-selected{ ... } 何时用 :hover{...}?
  • 3Ds Max 2026安装包+教程网盘下载与安装教程指南
  • [特殊字符] Whisper 模型介绍(OpenAI 语音识别系统)
  • WEB3全栈开发——面试专业技能点P1Node.js / Web3.js / Ethers.js