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;
    }
}
相关推荐
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
小蒋学算法3 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
荆棘鸟智能3 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
hhb_6184 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法
朝朝辞暮i4 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
苏打豆5 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人
FluxArt5 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
思麟呀5 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
阜阳山君GEO6 小时前
豆包 SEED 新版本 GEO 优化:信源金字塔、打分体系与避坑落地指南
人工智能·算法
晓天衡宇•评测社区6 小时前
晓天衡宇亮相 2026 云栖大会:迈向更可信的高质量评测
人工智能·算法·机器学习