LeetCode Hot100 560.和为K的子数组

题目描述

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k的子数组的个数。

子数组是数组中元素的连续非空序列。

560. 和为 K 的子数组 - 力扣(LeetCode)

思路

想象有一根很长的绳子(数组),你想从中间剪下一段(子数组),让这一段的长度正好是 k。

如果你知道从绳子开头到当前剪刀位置的总长度(presum),你只需要往回看:"之前有没有哪个位置,距离开头正好是 presum - k?"

如果能找到这样一个点,那么从那个点到当前点之间的这一段,长度就一定是 k。

只需要使用hashmap每次存储当前所有出现过的前缀和以及该前缀和出现的次数。

遍历数组,每次更新前缀和以后判断presum-k是否存在,如果存在则累加次数。然后将当前的presum加入hashmap

代码

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        HashMap<Integer,Integer> map =new HashMap<>();
        int res=0,presum=0;
        map.put(0,1);
        for(int num:nums){
            presum+=num;
            if(map.containsKey(presum-k)){
                res+=map.get(presum-k);
            }
            map.put(presum,map.getOrDefault(presum,0)+1);
        }
        return res;
    }
}
相关推荐
文丑颜不良啊33 分钟前
LeetCode2481~2500题目解析
java·leetcode
武子康4 小时前
驾驶轨迹换个坐标,就能给移动机器人用吗?
人工智能·算法·机器学习
David猪大卫5 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
vvilkim6 小时前
数据结构类型、区别与应用场景:一篇讲透选型逻辑
数据结构
文丑颜不良啊7 小时前
LeetCode2461~2480题目解析
java·leetcode
文丑颜不良啊9 小时前
LeetCode2441~2460题目解析
java·leetcode
文丑颜不良啊10 小时前
LeetCode2521~2540题目解析
java·leetcode
lisw0510 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
阿卡好可爱11 小时前
Lua 热更新不生效:改完文件线上仍是旧逻辑,package.loaded 与 upvalue 重绑定详解
数据结构·分布式·后端·架构·lua