int subarraySum(vector<int>& nums, int k) {
unordered_map<int, int> hash;
int count = 0, psum = 0;
hash[0] = 1;
for(int i = 0; i < nums.size(); i++){
psum += nums[i];
count += hash[psum - k];
hash[psum]++;
}
return count;
}
int subarraysDivByK(vector<int>& nums, int k) {
int ans = 0, n = nums.size(), curSum = 0;
unordered_map<int, int> hash;
hash[0] = 1;
int mod;
for(int i = 0; i < n; i++){
curSum += nums[i];
mod = (curSum % k + k) % k;
ans += hash[mod];
hash[mod]++;
}
return ans;
}
leetcode 1248 numberOfSubarrays
int numberOfSubarrays(vector<int>& nums, int k) {
unordered_map<int, int> m;
const int n = nums.size();
int rst = 0;
int acc = 0;
m[0] = 1;
for (int i = 0; i < n; ++i) {
acc += (nums[i]%2);
rst += m[acc-k];
m[acc]++;
}
return rst;
}
leetcode 1588 sumOddLengthSubarrays
int sumOddLengthSubarrays(vector<int>& nums) {
int ans = 0, n = nums.size();
vector<int> preSum(n + 1, 0);
for(int i = 0; i < n; i++){
preSum[i+1] = preSum[i] + nums[i];
}
for(int i = 0; i < n; i++){
for(int j = i + 1; j <= n; j+=2){
ans += preSum[j] - preSum[i];
}
}
return ans;
}