解题思路:本题思路主要是前缀和思想,涉及到子集和问题,前缀和思想有效,两个前缀和的差就等于对应一个子集和。本题可以用哈希表的方式记录每个前缀和的值,核心依靠k = pre[j]-pre[i]转化成pre[j]-k=pre[i],计算pre[i]这个值出现的个数加到res中,最后返回。
class Solution {public int subarraySum(int[] nums, int k) {Map<Integer,Integer> hashmap = new HashMap<>();hashmap.put(0,1);int res = 0;int sum = 0;for(int num:nums){sum+=num;if(hashmap.containsKey(sum-k)){res += hashmap.get(sum-k);}hashmap.put(sum,hashmap.getOrDefault(sum,0)+1);}return res;}
}