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;
}
本文介绍了解决子数组求和等于特定值K问题的两种算法:前缀和(Presum)方法和前缀和加哈希映射优化方法。前缀和方法的时间复杂度为O(n^2),而优化后的哈希映射方法将时间复杂度降低到O(n)。
605

被折叠的 条评论
为什么被折叠?



