题目描述
给定一个整数数组 nums 和一个整数 k,请统计并输出该数组中连续子数组和为 k 的个数。
输入描述
第一行输入一个整数 n,表示数组长度。
第二行输入 n 个整数,表示数组 nums。
第三行输入一个整数 k。
输出描述
输出和为 k 的连续子数组个数。
示例 1
输入
text
3
1 1 1
2
输出
text
2
说明
有两个子数组和为 2:[1,1] 和 [1,1]。
示例 2
输入
text
3
1 2 3
3
输出
text
2
说明
子数组 [3] 和 [1,2] 的和都是 3。
C++ 解法
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) cin >> nums[i];
int k;
cin >> k;
unordered_map<int, int> mp;
mp[0] = 1;
int sum = 0;
int ans = 0;
for (int x : nums) {
sum += x;
if (mp.count(sum - k)) {
ans += mp[sum - k];
}
mp[sum]++;
}
cout << ans << endl;
return 0;
}