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

[优选算法专题四.前缀和——NO.29 和为 K 的子数组]

题目链接:

和为 K 的子数组

题目描述:

题目解析:

核心思路

利用前缀和哈希表的结合,将时间复杂度从暴力解法的 O (n²) 优化至 O (n)。

1️⃣前缀和定义:设 sum[i] 表示数组前 i 个元素的和(即 nums[0] + nums[1] + ... + nums[i-1]),则子数组 nums[j..i-1] 的和可表示为 sum[i] - sum[j]

2️⃣问题转化:若子数组 nums[j..i-1] 的和为 k,则 sum[i] - sum[j] = k,即 sum[j] = sum[i] - k。因此,对于当前前缀和 sum[i],只需统计此前出现过的 sum[j] = sum[i] - k 的次数,即可得到以 i-1 为结尾的、和为 k 的子数组个数。

3️⃣哈希表作用:用哈希表 hash 存储前缀和的值该值出现的次数,实时记录遍历过程中前缀和的出现频率,避免重复计算。

关键细节

  • 初始化 hash[0] = 1:当 sum = k 时(即子数组从索引 0 开始到当前位置),sum - k = 0,此时需用 hash[0] = 1 来统计这种情况,否则会遗漏。

  • 遍历顺序:先检查 hash 中是否存在 sum - k,再将当前 sum 存入 hash,避免将当前 sum 误算入统计(因为子数组必须是之前的前缀和当前前缀和的差)。

复杂度分析

  • 时间复杂度:O (n),其中 n 是数组长度。遍历数组一次,哈希表的插入和查询操作均为 O (1)(平均情况)。
  • 空间复杂度:O (n),哈希表最多存储 n+1 个不同的前缀和(极端情况下所有前缀和均不重复)。
http://www.dtcms.com/a/507642.html

相关文章:

  • Python Web框架深度对比:Django vs Flask vs FastAPI(含优缺点与选型策略)
  • 盲盒抽谷机小程序:打造个性化消费的梦幻舞台
  • 性能优化揭秘:将淘宝商品 API 响应时间从 500ms 优化到 50ms 的技术实践
  • 龙岩互联网抖音seo招商
  • C++ 智能指针 std::unique_ptr、std::shared_ptr、std::weak_ptr
  • 猿辅导Java面试真实经历与深度总结(三)
  • Doris 数据导入
  • 网站建设+泰安saas建站平台有哪些
  • 动态规划之两个字符组/两个数组的dp问题
  • 【AI论文】UniVideo:面向视频的统一理解、生成与编辑
  • 获取resources目录下静态资源的两种方式
  • 一个域名可以做几个网站吗最好加盟网站建设
  • Android 自定义 View 如何设置默认尺寸
  • C#技术栈
  • 广东建设监理网站如何查企业的工商信息
  • INT301 Bio-computation 生物计算(神经网络)Pt.2 监督学习模型:感知器(Perceptron)
  • 机器学习(4)多特征与向量化
  • stripe/paypal
  • 机器学习(5)特征缩放与梯度下降收敛
  • 英飞凌推出首款100V aec合格GaN晶体管
  • 李宏毅机器学习笔记27
  • 机器学习作业七
  • openEuler安装jdk,nginx,redis
  • ffmpeg 交叉编译
  • Python编程之面向对象
  • 建设一个网站大概费用门户网站开发工具
  • OpenCV cv::Mat.type() 以及类型数据转换
  • Elasticsearch批量写入50万数据
  • 爬取GitHub开源项目信息并生成词云:从数据抓取到可视化实践
  • 做阀门的网站域名有了怎么建设网站