给你一个整数数组 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
本题使用前缀和可以解答~
cpp
int sum = 0; // 全局变量,用于记录和为k的子数组的个数
int subarraySum(vector<int>& nums, int k) {
int sumCount = 0; // 用于记录和为k的子数组的个数
vector<int> sums(nums.size() + 1,0); // 初始化前缀和数组,大小为nums.size()+1,方便计算
sums[0] = 0;
// 计算前缀和
for (int i = 0; i < nums.size(); i++) {
sums[i+1] = nums[i] + sums[i];
}
for(int i=0;i<nums.size();i++){
for(int j=i;j<nums.size();j++){
if(sums[j+1]-sums[i]==k)sum++;
}
}
return sum;
}
简单的前缀和就可以解决了,当然我看别人还用到了哈希表来处理,我这里就不展示了,感兴趣的可以再研究研究~