P10 - 和为K的子数组
About 212 wordsLess than 1 minute
leetcodehot100
2025-1-11
题目
给你一个整数数组 nums
和一个整数 k
,请你统计并返回 该数组中和为 k
的子数组的个数 。
子数组是数组中元素的连续非空序列。
示例 1:
输入:nums
= [1,1,1]
, k = 2 **输出:**2
示例 2:
输入:nums
= [1,2,3]
, k = 3 **输出:**2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107
实现
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int , int> presum;
presum[0] = 1; // 前缀和为零的数组有一个 对应刚好取到头部的情况
int currentSum = 0;
int res = 0;
for(auto& num: nums) {
currentSum += num;
// presum[j] - presum[i-1] = k .st i < j
// .eg presum[i-1] = presum[j] - k 这里presum[j]就是当前的前缀和
if(presum.contains(currentSum - k)) {
res += presum[currentSum - k];
}
presum[currentSum] ++;
}
return res;
}
};