/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// your code goes here
}
}
class Solution {
public int cntSubarrays(int[] arr, int k) {
// HashMap to store prefix sums frequencies
Map
<Integer, Integer
> prefixSums
= new HashMap
<>(); int res = 0;
int currSum = 0;
for (int i = 0; i < arr.length; i++) {
// Add current element to sum so far.
currSum += arr[i];
// If currSum is equal to desired sum
// then a new subarray is found.
if (currSum == k)
res++;
// Check if the difference exists in the prefixSums map.
if (prefixSums.containsKey(currSum - k))
res += prefixSums.get(currSum - k);
// Add currSum to the set of prefix sums.
prefixSums.put(currSum, prefixSums.getOrDefault(currSum, 0) + 1);
}
return res;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCX0KfQoKCmNsYXNzIFNvbHV0aW9uIHsKICAgIHB1YmxpYyBpbnQgY250U3ViYXJyYXlzKGludFtdIGFyciwgaW50IGspIHsKICAgICAgICAgLy8gSGFzaE1hcCB0byBzdG9yZSBwcmVmaXggc3VtcyBmcmVxdWVuY2llcwogICAgICAgIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBwcmVmaXhTdW1zID0gbmV3IEhhc2hNYXA8PigpOwogICAgICAgIGludCByZXMgPSAwOwogICAgICAgIGludCBjdXJyU3VtID0gMDsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgLy8gQWRkIGN1cnJlbnQgZWxlbWVudCB0byBzdW0gc28gZmFyLgogICAgICAgICAgICBjdXJyU3VtICs9IGFycltpXTsKCiAgICAgICAgICAgIC8vIElmIGN1cnJTdW0gaXMgZXF1YWwgdG8gZGVzaXJlZCBzdW0KICAgICAgICAgICAgLy8gdGhlbiBhIG5ldyBzdWJhcnJheSBpcyBmb3VuZC4KICAgICAgICAgICAgaWYgKGN1cnJTdW0gPT0gaykKICAgICAgICAgICAgICAgIHJlcysrOwoKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpZmZlcmVuY2UgZXhpc3RzIGluIHRoZSBwcmVmaXhTdW1zIG1hcC4KICAgICAgICAgICAgaWYgKHByZWZpeFN1bXMuY29udGFpbnNLZXkoY3VyclN1bSAtIGspKQogICAgICAgICAgICAgICAgcmVzICs9IHByZWZpeFN1bXMuZ2V0KGN1cnJTdW0gLSBrKTsKCiAgICAgICAgICAgIC8vIEFkZCBjdXJyU3VtIHRvIHRoZSBzZXQgb2YgcHJlZml4IHN1bXMuCiAgICAgICAgICAgIHByZWZpeFN1bXMucHV0KGN1cnJTdW0sIHByZWZpeFN1bXMuZ2V0T3JEZWZhdWx0KGN1cnJTdW0sIDApICsgMSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzOwogICAgfSAgCn0=