class Solution {
public int subarraySum(int[] nums, int k) {
if (nums == null) return 0;
int length = nums.length;
int count = 0;
for (int left = 0; left < length; left++) {
int sum = 0;
for (int right = left; right < length; right++) {
sum += nums[right];
if (sum == k) {
count++;
}
}
}
return count;
}
}
class Solution {
public int subarraySum(int[] nums, int k) {
if (nums.length == 0) return 0;
int[] preSum = new int[nums.length + 1];
preSum[0] = 0;
for (int i = 0; i < nums.length; i++) {
preSum[i + 1] = preSum[i] + nums[i];
}
int count = 0;
for (int left = 0; left < nums.length; left++) {
for (int right = left; right < nums.length; right++) {
if (preSum[right + 1] - preSum[left] == k) {
count++;
}
}
}
return count;
}
}
class Solution {
public int subarraySum(int[] nums, int k) {
Map<Integer, Integer> preSumFreq = new HashMap<>();
preSumFreq.put(0, 1);
int preSum = 0;
int count = 0;
for (int num : nums) {
preSum += num;
if (preSumFreq.containsKey(preSum - k)) {
count += preSumFreq.get(preSum - k);
}
preSumFreq.put(preSum, preSumFreq.getOrDefault(preSum, 0) + 1);
}
return count;
}
}