Subarray Sum Equals K
Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.
方法一:Presum
时间复杂度:O(n^2)
空间复杂度:O(n)
public int subarraySum(int[] nums, int k) {
int length = nums.length;
if(length == 0)
return 0;
int[] sum = new int[length + 1];
sum[0] = 0;
int count = 0;
for(int i = 1;i <= length;i++){
sum[i] = nums[i - 1] + sum[i - 1];
}
for(int i = 0;i < length;i++){
for(int j = i;j < length;j++){
if(sum[j + 1] - sum[i] == k){
count++;
}
}
}
return count;
}
方法二:Presum+HashMap优化
时间复杂度:O(n)
空间复杂度:O(n)
public int subarraySum(int[] nums, int k) {
int length = nums.length;
if(length == 0)
return 0;
Map<Integer,Integer> map = new HashMap<>();
map.put(0,1);
int sum = 0;
int count = 0;
for(int i = 0;i < length;i++){
sum += nums[i];
if(map.containsKey(sum - k)){
count += map.get(sum - k);
}
map.put(sum,map.getOrDefault(sum,0)+1);
}
return count;
}