560-Subarray-Sum-Equals-K
0x0 题目详情
0x1 解题思路
0x2 代码实现
class Solution {
public int subarraySum(int[] nums, int k) {
if(nums==null || nums.length==0){
return 0;
}
if(nums.length<2){
return nums[0]==k?1:0;
}
int result=0;
Map<Integer,Integer> prefixSumCount=new HashMap<>();
prefixSumCount.put(0,1);
int sum=0;
for(int i=0;i<nums.length;i++){
sum+=nums[i];
int sub=sum-k;
//获取前缀和为sum-k的个数,
//这里为什么要先求出现的次数呢?因为我们求的是i之前前缀和为sun-k的个数,不包括i,一旦先更新,就会提前把包含i的前缀和加入map,,如果k=0,就会污染了原来的数据
int preCount=prefixSumCount.getOrDefault(sub,0);
result+=preCount;
prefixSumCount.put(sum,prefixSumCount.getOrDefault(sum,0)+1);
}
return result;
}
}0x3 课后总结
Last updated