Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
Example 1:
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].
给定一个整数数组和一个整数k,您需要找到总和等于k的连续子数组的总数。
凡是有求和的题目的化简似乎都需要弄个和的数组
这边我们使用哈希map来存储之前的和的数量,这样我们就能快速地找到sum(0,i).sum(i,j)=sum(0,j)-sum(0,i),从而找到相应的数值。
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int, int> sum_table;
int sum = 0, buffer = 0, result = 0;
sum_table.insert(make_pair(0, 1));
for(int i = 0; i < nums.size(); i++){
sum += nums[i];
buffer = sum - k;
auto it = sum_table.find(buffer);
if(it != sum_table.end()){
result += it->second;
}
it = sum_table.find(sum);
if(it != sum_table.end()){
it->second++;
}
else{
sum_table.insert(make_pair(sum, 1));
}
}
return result;
}
};