和为 K 的子数组(前缀和+哈希表)
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums = [1,1,1], k = 2 输出:2
示例 2:
输入:nums = [1,2,3], k = 3 输出:2
思路:前缀和 + 哈希表优化
class Solution { public: int subarraySum(vector<int>& nums, int k) { // 获取输入数组的长度 int n = nums.size(); // 创建前缀和数组 vector<int> prefix(n+1, 0); // 计算前缀和数组 for(int i=0; i<n; i++){ prefix[i+1] = prefix[i] + nums[i]; } // 使用哈希表(map)来记录每个累积和出现的次数 map<int,int> mp; // 初始化结果计数器 int res = 0; // 遍历前缀和数组,寻找符合条件的子数组 for(int i=0; i<n+1; i++){ // 当前位置的前缀和 int current = prefix[i]; // 如果当前前缀和减去目标值 k 的结果在哈希表中存在, // 则说明存在一个或多个子数组的和为 k if(mp.find(current - k) != mp.end()) res += mp[current - k]; // 将满足条件的子数组数量累加到结果中 // 更新哈希表 mp[current]++; } return res; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探