https://leetcode.com/problems/subarray-sum-equals-k/description/
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
Example 1: Input:nums = [1,1,1], k = 2 Output: 2
解题:我们在看path sum的其他问题之前,需要看看一下这个题,这题要求有多少subarrays sum 等于给定的值k。解法就和two sum的解法类似,用hashmap 把pre sum存起来,遍历的时候用当前sum 减去 k,如果hashmap里面有sum - k,说明两个点之间数值和为k。
class Solution {
public int subarraySum(int[] nums, int k) {
int sum = 0, result = 0;
Map<Integer, Integer> preSum = new HashMap<>();
preSum.put(0, 1);
for (int i = 0; i < nums.length; i++) {
//当前index数组的sum
sum += nums[i];
//如果当前sum减去k的值在哈西表出现过,说明当前sum的位置到之前sum之间的和为k
if (preSum.containsKey(sum - k)) {
result += preSum.get(sum - k);
}
//把当前sum放入哈西表的key,value为出现次数。
preSum.put(sum, preSum.getOrDefault(sum, 0) + 1);
}
return result;
}
}