前缀和问题
前缀和常用于数组,可以简化算法复杂度
leetcode560 和为K的子数组
class Solution {
public int subarraySum(int[] nums, int k) {
int res = 0;
int pre = 0;
Map<Integer,Integer> map = new HashMap<>();
map.put(0,1);
for(int i=0;i<nums.length;i++){
pre+=nums[i];
if(map.containsKey(pre-k)){
res += map.get(pre-k);
}
map.put(pre,map.getOrDefault(pre,0)+1);
}
return res;
}
}
leetcode525 连续数组
class Solution {
public int findMaxLength(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
int res = 0;
int sum = 0;
for(int i=0;i<nums.length;i++){
if(nums[i] == 1){
sum += 1;
}else{
sum += -1;
}
if(sum == 0){
res = Math.max(res,i+1);
}
if(map.containsKey(sum)){
res = Math.max(res,i-map.get(sum));
}else{
map.put(sum,i);
}
}
return res;
}
}