利用哈希表保存遍历过的元素,需要求其中某一段子数组的题目,则根据条件从map保存的前缀和中找出相关的元素
560. 和为 K 的子数组
思路
class Solution {
public int subarraySum(int[] nums, int k) {
//
Map<Integer,Integer> map = new HashMap<>();
int sum = 0,co = 0;
//存储和为0出现了一次,就是在不开始遍历的时候就有
map.put(0,1);
for(int i = 0;i<nums.length;i++){
sum += nums[i];
//如果前缀和中存在sum-k,则说明存在一段子数组,其和为k
if(map.containsKey(sum-k)){
co+=map.get(sum-k);
}
//若无,则将当前sum加入前缀和中
map.put(sum,map.getOrDefault(sum,0)+1);
}
return co;
}
}