问题描述:
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
示例:
Input:nums = [1,1,1], k = 2 Output: 2
Note:
- The length of the array is in range [1, 20,000].
- The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].
问题分析:
求子数组和sum[i,j],我们可以划分成sum[i,j] = sum[0,j] - sum[0,i-1].因而我们只需要将遍历过的sum存储起来,记录好sum出现的次数,以此方便求解。
过程详见代码:
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int, int> map;
map[0] = 1;
int sum = 0,res= 0;
for (int i = 0; i < nums.size(); i++)
{
sum += nums[i];
if (map.find(sum - k) != map.end())
{
res += map[sum - k];
}
map[sum]++;
}
return res;
}
};