思路
含有负数就不能使用滑动窗口!!!
Python版本
class Solution:
def subarraySum(self, nums: List[int], k: int) -> int:
n = len(nums)
pre = [0] * (n+1)
cnt = defaultdict(int)
cnt[0] = 1
res = 0
# 构造前缀和
for i in range(1,n+1):
pre[i] = pre[i-1] + nums[i-1]
# 遍历答案
for j in range(1,n+1):
res += cnt[pre[j] - k]
cnt[pre[j]] += 1
return res
Java版本
class Solution {
public int subarraySum(int[] nums, int k) {
int n = nums.length;
int[] pre = new int[n+1];
pre[0] = 0;
for (int i = 1;i<n+1;i++){
pre[i] = pre[i-1] + nums[i-1];
}
int res = 0;
Map<Integer,Integer> cnt = new HashMap<Integer,Integer>();
// cnt.put(0,1);
for (int j = 0;j<n+1;j++){
res += cnt.getOrDefault(pre[j] - k, 0);
cnt.put(pre[j],cnt.getOrDefault(pre[j], 0) + 1);
}
return res;
}
}