前缀和+hashmap
题目是寻找数组和为k的个数,如果我们将数组的每个下标之前的所有元素进行加和,那么问题就转变为了,到下标为i(假设前i个数组元素的和为sum)的之前的子数组中,有多少sum-k个前缀满足。然后我们再将sum加入到hashmap中。
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
// 用于存放已有的前缀和
unordered_map<int,int> m; // key记录每个位置的前缀和,value记录下标
int sum = 0; // 用于记录前缀和
int count = 0; // 用于记录子数组的个数
m[0] = 1; // 将map中的第一个元素下标置0,值值为0
// 循环遍历数组中的元素进行累加前缀和
for(int i=0;i<nums.size();i++){
sum += nums[i];
count+=m[sum-k];
m[sum]++;
}
return count; // 返回满足条件的数组总数
}
};