尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
【子串】LC 560.和为 K 的子数组
文章目录前言一、题目1、原题链接2、题目描述二、个人思路整理1、思路分析2、解题代码三、知识风暴前言本专栏文章为《LeetCode 热题 100》的刷题题解相关内容如有侵权立即删除。一、题目1、原题链接560.和为 K 的子数组2、题目描述二、个人思路整理1、思路分析核心思路前缀和哈希表。子数组和与前缀和的关系定义prefix_sum[i]为前i ii个元素的和令prefix_sum[0] 0。任意连续子数组nums[j..i-1]的和可以表示为sum ( j , i − 1 ) prefix_sum [ i ] − prefix_sum [ j ] \text{sum}(j, i-1) \text{prefix\_sum}[i] - \text{prefix\_sum}[j]sum(j,i−1)prefix_sum[i]−prefix_sum[j]等式转换我们要找满足sum ( j , i − 1 ) k \text{sum}(j, i-1) ksum(j,i−1)k的子数组即prefix_sum [ i ] − prefix_sum [ j ] k ⟺ prefix_sum [ j ] prefix_sum [ i ] − k \text{prefix\_sum}[i] - \text{prefix\_sum}[j] k \iff \text{prefix\_sum}[j] \text{prefix\_sum}[i] - kprefix_sum[i]−prefix_sum[j]k⟺prefix_sum[j]prefix_sum[i]−k哈希表优化类似两数之和遍历数组的同时维护当前的累加和current_sum。查询哈希表中已出现过的前缀和中有多少个等于current_sum - k将其出现次数累加到答案中。将当前的current_sum记录到哈希表中频次 1。关键边界条件初始化 {0: 1}哈希表必须预先存入mp[0] 1。这代表“前缀和为 0 出现过 1 次”用来处理从下标 0 开始的子数组和恰好等于k kk的情况即current_sum - k 0。复杂度分析时间复杂度O ( n ) O(n)O(n)只需单次遍历数组哈希表单次存取平均时间为O ( 1 ) O(1)O(1)。空间复杂度O ( n ) O(n)O(n)哈希表最多存储O ( n ) O(n)O(n)个不同的前缀和。2、解题代码classSolution{public:intsubarraySum(vectorintnums,intk){// 哈希表用于记录 前缀和 出现的频次unordered_mapint,intprefix_freq;prefix_freq[0]1;// 前缀和为 0 出现了 1次intcurrent_sum0;// 记录遍历过程中累加前缀和intcount0;// 记录符合条件的子数组总数for(intnum:nums){current_sumnum;// 更新当前的前缀和// 查找前面是否存在 prefix_sum 使得 current_sum - prefix_sum k// 每一个对应的查询历史上等于 (current_sum - k) 的位置到当前位置都能构成一个和为 k 的子数组if(prefix_freq.count(current_sum-k)){countprefix_freq[current_sum-k];// 2026.10.25重做后 注意count不是}// 将当前前缀和加入哈希表prefix_freq[current_sum];}returncount;}};三、知识风暴前缀和Prefix Sum与哈希表Hash Map是解决连续子数组和问题的经典组合。其核心思想是将“子数组和”问题转化为“两数之差”问题并利用哈希表实现O(1)时间的历史查询。适用场景子数组和问题快速统计数组中满足特定和条件的连续子数组数量。累积统计问题需要频繁查询任意区间和或区间统计信息。关键思想前缀和转换定义prefix[i]为前i个元素之和。任意子数组nums[j..i-1]的和可表示为prefix[i] - prefix[j]。哈希表优化将问题prefix[i] - prefix[j] k转化为寻找历史上是否存在prefix[j] prefix[i] - k。遍历时用哈希表记录每个前缀和出现的次数即可在O(1)时间内得到以当前位置结尾的、和为k的子数组数量。初始化技巧哈希表预先存入{0: 1}以处理从数组开头开始的子数组即prefix[i] - 0 k。相关 LeetCode 例题560. 和为 K 的子数组本题523. 连续的子数组和涉及模运算974. 和可被 K 整除的子数组前缀和与同余定理325. 和等于 k 的最长子数组长度求最长长度
RELATED

相关推荐

IINA 免费 Mac 视频播放器安装与字幕设置完整指南

IINA 免费 Mac 视频播放器安装与字幕设置完整指南

IINA 免费 Mac 视频播放器安装与字幕设置完整指南 【免费下载链接】iina The modern video player for macOS. 项目地址: https://gitcode.com/gh_mirrors/iin/iina IINA 是一款免费的 macOS 开源视频播放器,内核是 mpv——Mac 上解码能力最强的开源播放引擎…

📅 2026/10/26 10:06:00
从 2007 年到 2026:OpenCore Legacy Patcher 让老 Mac 完整升级最新 macOS 的实战指南

从 2007 年到 2026:OpenCore Legacy Patcher 让老 Mac 完整升级最新 macOS 的实战指南

从 2007 年到 2026:OpenCore Legacy Patcher 让老 Mac 完整升级最新 macOS 的实战指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 用 OpenCor…

📅 2026/10/26 10:06:00
k8s漏洞学习

k8s漏洞学习

一、K8s简介 kubernetes(简称k8s)是一个容器编排平台,可自动管理成千上万个“装着小程序的盒子(容器)”-什么时候启动、放在哪台机器上启动、挂了怎么重启、怎么互相访问. 类比: 容器:类似于集装箱,里面装着程序代码,可以搬到任何“码头”(操作系统)的地方运行 kubernetes:类…

📅 2026/10/26 10:06:00
MORE NEWS

更多资讯

📰

亿级流量系统架构设计:高并发挑战与解决方案

1. 亿级流量系统的挑战与设计哲学 当系统流量突破亿级大关时,传统的架构设计思路会遭遇前所未有的挑战。我在参与某电商大促系统改造时,曾亲眼见证QPS从5万暴涨到120万的瞬间,这让我深刻理解了阿里技术团队提出的"稳定压倒一切"的设…

📰

100kW导热油炉工业应用与控制系统详解

1. 项目概述:100kW导热油炉的工业应用场景 100kW瑞源电加热导热油炉是工业生产中常见的中小型热源设备,主要应用于需要精确控温的工艺环节。这类设备在塑料成型、化工反应、食品烘干等行业中扮演着关键角色,其核心优势在于能够提供稳定的高温…

📰

Vivado+Verilog单周期CPU设计:MIPS数据通路与上板调试

简介:面向计算机组成原理课程设计与FPGA入门学习者的单周期CPU工程,用Verilog在Vivado中实现取指、译码、执行、写回的数据通路,涵盖指令寄存器、译码器、ALU、通用寄存器组、控制单元、存储器接口与程序计数器等模块,可帮助理解控…

📰

UR5机械臂MATLAB轨迹规划:DH建模、插补与奇异避坑

简介:这份资料围绕UR5六轴机械臂在MATLAB环境下的轨迹规划展开,面向机器人工程、自动化控制方向的学习者与实验开发者,侧重解决从运动学、动力学建模到平滑路径生成的完整实践问题。内容涉及正逆运动学求解、雅可比计算、欧拉角变换、关节空间…

📰

Linux HISTFILE环境变量详解与实用技巧

1. HISTFILE 是什么? 在 Linux/Unix 系统中,HISTFILE 是一个非常重要的环境变量,它决定了 shell 历史命令记录文件的存储位置。简单来说,这个文件就像是你终端操作的"黑匣子",忠实地记录着你输入过的每一条命…

📰

云服务器部署Dify:AI应用开发平台搭建指南

1. 为什么选择云服务器部署Dify? 在当今AI技术快速发展的时代,越来越多的开发者希望搭建自己的AI应用平台。Dify作为一个开源的AI应用开发平台,能够帮助开发者快速构建和部署AI应用。而云服务器因其弹性、可靠和易管理的特点,成为…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬