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
Note:
- The length of the array is in range [1, 20,000].
- The range of numbers in the array is [-1000, 1000] and the range of the integer k is [-1e7, 1e7].
1、假设需要求sum[i,j]是否和为k
2、则sum[i,j] = sum[0,j] - sum[0, i-1]
3、可以在遍历过程中存储sum[0, i-1]的值,若档期值sum-k的值之前出现过,合法子串增加sum-k出现的次数个
class Solution {
public int subarraySum(int[] nums, int k) {
if(nums==null || nums.length==0)
return 0;
int n = nums.length;
//<nums[i]前的所有数字和,和相同的个数>
Map<Integer, Integer> preSum = new HashMap<Integer, Integer>();
int sum=0;
preSum.put(0,1);
int res=0;
for(int i=0; i<n; i++){
sum+=nums[i];
if(preSum.containsKey(sum-k)){
res+=preSum.get(sum-k);
}
preSum.put(sum, preSum.getOrDefault(sum, 0)+1);
}
return res;
}
}