给你一个整数数组 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 <= 107class Solution {
public:
// 前缀和
int subarraySum(vector<int>& nums, int k)
{
int ans = 0;
vector<int> arr(nums.size(), 0);
arr[0] = nums[0];
map<int, int> tu;
for (int i = 1; i < nums.size(); i++)
{
arr[i] = arr[i - 1] + nums[i];
}
for (int i = 0; i < nums.size(); i++)
{
if (arr[i] == k)
{
ans++;
}
int num = arr[i] - k;
if (tu.count(num) == 1)
{
ans += tu[num];
}
tu[arr[i]]++;} return ans;}
};