class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
unordered_map<int, int> m;
m[0] = 1;
int count = 0;
int pre = 0;
for (auto& i : nums) {
pre += i;
if (m.find(pre - k) != m.end()) {
count += m[pre - k];
}
m[pre]++;
}
return count;
}
};
总结
- 建立哈希表,前缀和为键,次数为值
- 统计map[pre - k]的次数
- map.find 比 map.count快