560.和为 K 的子数组
题目
给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。
子数组是数组中元素的连续非空序列。
思路
计算数组前缀和,\(s[j]-s[i]=k\),转为\(s[j]-k=s[i]\),对于\(s[i]\)查找(两数之和哈希表思路)。
解法
class Solution {
public int subarraySum(int[] nums, int k) {
int n=nums.length;
int[] s=new int[n+1];
for(int i=0;i<n;i++){
s[i+1]=s[i]+nums[i];
}
int ans=0;
Map<Integer,Integer> cnt=new HashMap<>(n+1,1);
for(int sj:s){
ans+=cnt.getOrDefault(sj-k,0);
cnt.merge(sj,1,Integer::sum);
}
return ans;
}
}
浙公网安备 33010602011771号