题目:
给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。
输入: nums = [1, 1, 1], k = 2;
输出: 2
解释: [1, 1] 与 [1, 1] 为两种不同的情况。
解析
方法一: 暴力枚举法。
方法二: 前缀和(用到哈希表)。
参考答案:
class Solution{
public:
int subarraySum(vector<int>& nums, int k){
//方法一:暴力枚举法
int count = 0;
for(int i = 0; i < nums.size(); ++i){
int sum = 0;
for(int j = i; j >= 0; j--){
sum += nums[j];
if(sum == k){
count++;
}
}
}
return count;
//方法二:前缀和(用到哈希表)
int sum = 0, count = 0;
unordered_map<int, int> mp;
mp[0] = 1;
for(int num : nums){
sum += num;
count += mp[sum - k];
mp[sum]++;
}
return count;
}
};