560 和为K的子数组
用个哈希表存储,key为sum,value是sum出现的次数,也就是每个起点的数量,我们先来看一下代码:
public static int subarraySumBetter(int[] nums, int k) {
HashMap<Integer, Integer> map = new HashMap<>();
int result = 0;
int sum = 0;
map.put(0, 1);
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if(map.containsKey(sum-k))
result += map.get(sum-k);
// result += map.getOrDefault(sum - k, 0);
int t = map.getOrDefault(sum, 0) + 1;
map.put(sum, t);
}
return result;
}
public static void main(String[] args) {
int[] test1 = {1,1,1,1,1,1,1,0,1,1};
System.out.println(subarraySumBetter(test1, 3));
}
我们来看看这个这些个值的变化情况,下面就是参数的变化的值示意图