尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
560.和为k的子数组
一、题目描述给你一个整数数组nums和一个整数k请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。示例 1输入nums [1,1,1], k 2 输出2示例 2输入nums [1,2,3], k 3 输出2提示1≤nums.length≤2×1041 \le nums.length \le 2 \times 10^41≤nums.length≤2×104−1000≤nums[i]≤1000-1000 \le nums[i] \le 1000−1000≤nums[i]≤1000−107≤k≤107-10^7 \le k \le 10^7−107≤k≤107⚠️ 重点数组包含负数不能用滑动窗口双指针二、暴力解法分析超时最容易想到的思路枚举子数组起点和终点累加区间和判断是否等于k。两层循环时间复杂度O(n2)O(n^2)O(n2)。当 n 达到 2e4 时运算量高达 4e8一定会超时无法通过。三、前缀和核心思想前缀和pre[i]数组从下标 0 加到下标 i 的总和。区间[j1,i][j1, i][j1,i]的和公式sumpre[i]−pre[j]sum pre[i] - pre[j]sumpre[i]−pre[j]题目要求区间和等于 kpre[i]−pre[j]kpre[i] - pre[j] kpre[i]−pre[j]k变形得到pre[j]pre[i]−kpre[j] pre[i] - kpre[j]pre[i]−k含义遍历到 i 的时候只要前面已经出现过前缀和等于pre[i] - k就对应一组合法连续子数组。四、前缀和 哈希表优化思路哈希表作用记录每个前缀和出现的次数初始化mp[0] 1作用处理pre[i] k的场景也就是从数组开头到 i 的子数组满足条件。遍历流程当前前缀和加上当前元素查询pre - k是否存在哈希表存在则把对应次数加到答案将当前前缀和更新进哈希表计数1✅ 顺序不能颠倒先查询再存入哈希表避免重复使用当前位置五、C 代码实现#include unordered_map #include vector using namespace std; class Solution { public: int subarraySum(vectorint nums, int k) { unordered_mapint, int mp; mp[0] 1; int pre 0, res 0; for (int x : nums) { pre x; if (mp.find(pre - k) ! mp.end()) { res mp[pre - k]; } mp[pre]; } return res; } };六、Python 代码实现from collections import defaultdict from typing import List class Solution: def subarraySum(self, nums: List[int], k: int) - int: cnt 0 pre 0 hashmap defaultdict(int) hashmap[0] 1 for x in nums: pre x if pre - k in hashmap: cnt hashmap[pre - k] hashmap[pre] 1 return cnt七、复杂度分析时间复杂度(O(n))(O(n))(O(n))数组一次遍历哈希表查询平均(O(1))(O(1))(O(1))空间复杂度(O(n))(O(n))(O(n))哈希表最多存储 n 个前缀和八、高频易错点总结数组存在负数前缀和不单调不能用双指针滑动窗口必须初始化mp[0] 1很多人漏掉这个条件导致样例不通操作顺序先查pre-k再更新哈希表不能反过来相同前缀和需要累加次数不是只记录是否存在
RELATED

相关推荐

slub prefetch_freepointer

slub prefetch_freepointer

SLUB 里一个纯粹的性能优化辅助函数,功能只有一件事:预取下一个空闲对象的 freepointer 所在内存,以隐藏内存访问延迟。一、函数签名static void prefetch_freepointer(const struct kmem_cache *s, void *object)参数含义s缓存指针&#xff…

📅 2026/10/26 1:59:07
【C++开发】从裸指针到智能指针

【C++开发】从裸指针到智能指针

前言 老C/C开发,用惯了裸指针的方式,之前发布过一篇文章,专门分享结构体通过函数指针成员的方式是实现类成员函数的效果,本篇风格也一样,从C/C的裸指针,再延伸到C智能指针。 C/C 聊聊结构体、指针、类_qt …

📅 2026/10/26 1:59:07
【Linux网络】网络基础下篇:数据到底怎么从进程 A 到进程 B?从 MAC、IP、端口到 Socket 一次理清

【Linux网络】网络基础下篇:数据到底怎么从进程 A 到进程 B?从 MAC、IP、端口到 Socket 一次理清

🔥个人主页:爱和冰阔乐 📚专栏传送门:《数据结构与算法》 、C、 《Linux操作系统》 🐶学习方向:C方向学习爱好者 ⭐人生格言:得知坦然 ,失之淡然 🏠博主简介 文章目录前…

📅 2026/10/26 1:59:07
MORE NEWS

更多资讯

📰

从完美主义到无可挑剔:一套可复制的高质量行动法

1. 从“完美主义”到“无可挑剔”:重新理解这个词我第一次认真琢磨“impeccable”这个词,不是因为词典,而是因为收到过一封邮件。那封邮件不长,但措辞、排版、附件命名、签名档甚至发送时间,都让人觉得发件人极其靠谱。…

📰

ADS8688+STM32F407+RT-Thread高精度模拟量采集系统实战

简介:本资源是一套基于STM32F407主控、ADS8688高精度ADC与RT-Thread实时操作系统的完整嵌入式驱动工程,面向嵌入式开发初学者及RTOS进阶实践者,解决高精度模拟信号采集在实时系统中稳定驱动与数据处理的典型难题,适用于工业传感、…

📰

代码质量量化落地:三层机制让“完美”不再只是口号

我一直觉得,软件团队里最容易被误解的一个词就是“完美”。很多人一听“完美代码”,第一反应是“这不可能”“这是洁癖”,或者“我们要的是能上线,不是搞艺术”。但几年前我在一个模拟项目里认真地追了一次“完美”,项…

📰

SXSSFWorkbook分页查询实现百万行Excel流式导出

一次导出请求把服务拖垮,事后排查下来,数据库不慢、网络不抖,问题出在几百兆的单元格对象全堆在堆内存里。SXSSFWorkbook 实现分页查询导出这个组合,就是专门解决这类场景的:流式写出把内存中的行数压到固定窗口&#…

📰

对话模型记忆增强实战:claude-mem架构解析

很多人在使用 Claude 这类对话模型时都遇到过同一个尴尬:上午刚聊完的方案细节,下午换个话题再切回来,它已经完全不记得了。如果只是临时问答倒也还好,可一旦你希望它持续跟进一个项目、记住你的写作偏好、或者跨多轮会话维护一份…

📰

AI编程中的规则约束:提升代码质量与工程效能

1. AI编程时代的规则约束革命当代码补全工具开始接管我们的IDE时,一个被忽视的真相正在浮现:真正决定AI编程质量的不是算法本身,而是我们为它设定的规则边界。最近三个月,我的团队在Vibe-Coding工作流中系统性地引入了Rules约束机…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬