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;
}
}