題目描述
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
Constraints:
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].
思路
哈希表記錄前綴和出現的次數。
代碼
class Solution {
public:
int subarraySum(vector<int>& nums, int k) {
int n = nums.size();
int cur = 0, res = 0;
unordered_map<int, int> counts{{0, 1}};
for (int num : nums) {
cur += num;
res += counts[cur-k];
counts[cur]++;
}
return res;
}
};