7月28日:和为K的连续子数组
题目如下:
题目看着不难,然后我第一个想到的就是暴力解法,直接双重循环。但是发现速度确实挺慢的,所以就看了一下官方的题解。
我的理解是:新建一个hashmap,然后遍历数组,并将数组累加,将累加的结果放入hashmap中,如果hanshmap中存在当前累加减去目标数,则说明存在一个和为K的子数组。
class Solution {
public int subarraySum(int[] nums, int k) {
if(nums==null||nums.length==0) return 0;
Map<Integer,Integer> hashmap = new HashMap<>();
int sum = 0;
int count = 0;
hashmap.put(0,1);
for(int i=0;i<nums.length;i++){
sum = sum + nums[i];
if(hashmap.containsKey(sum-k)){
count=count + hashmap.get(sum-k);
}
hashmap.put(sum,hashmap.getOrDefault(sum,0)+1);
}
return count;
}
}