一、题目:
给定一个整数数组nums和一个整数k,统计并返回该数组中和为k的子数组的个数。

二、思路:
1、用一个数组记录当前位置的前缀和,并用哈希表存储前缀和和出现的次数。
2、遍历数组,判断当前的前缀和-k是否有出现过,若出现过说明有以当前位置结尾且和为k的子数组。每次将当前的前缀和放入map中记录。
三、代码:
class Solution {
public int subarraySum(int[] nums, int k) {
Map<Integer,Integer> map = new HashMap<>();
int sum = 0;
int res = 0;
map.put(0,1);
for(int i =0;i<nums.length;i++){
sum += nums[i];
if(map.containsKey(sum - k)){
res += map.get(sum-k);
}
map.put(sum,map.getOrDefault(sum,0)+1);
}
return res;
}
}
四、语法记录
map.getOrDefault(sum,0):返回key为sum的value,没有该key则返回0。
493

被折叠的 条评论
为什么被折叠?



