【力扣练习题】热题100道【哈希】560. 和为 K 的子数组

import java.util.HashMap;

public class Solution {

/**

* 统计和为k的连续子数组个数

* @param nums 整数数组

* @param k 目标和

* @return 符合条件的子数组个数

*/

public int subarraySum(int\[\] nums, int k) {

// count:记录最终符合条件的子数组个数

int count = 0;

// pre:记录当前的前缀和(前i个元素的和)

int pre = 0;

// 哈希表:key=前缀和值,value=该前缀和出现的次数

HashMap<Integer, Integer> mp = new HashMap<>();

// 初始化:前缀和为0的情况出现1次(对应子数组从下标0开始的情况)

mp.put(0, 1);

复制代码
    // 遍历数组,计算前缀和并统计
    for (int i = 0; i < nums.length; i++) {
        // 累加当前元素,更新前缀和
        pre += nums[i];
        // 若哈希表中存在pre - k,说明存在j使得pre[i] - pre[j-1] = k,累加其出现次数
        if (mp.containsKey(pre - k)) {
            count += mp.get(pre - k);
        }
        // 将当前前缀和存入哈希表,若已存在则次数+1,否则设为1
        mp.put(pre, mp.getOrDefault(pre, 0) + 1);
    }
    // 返回结果
    return count;
}

}

import java.util.HashMap;

public class Solution {

/**

* 统计和为k的连续子数组个数

* @param nums 整数数组

* @param k 目标和

* @return 符合条件的子数组个数

*/

public int subarraySum(int\[\] nums, int k) {

// count:记录最终符合条件的子数组个数

int count = 0;

// pre:记录当前的前缀和(前i个元素的和)

int pre = 0;

// 哈希表:key=前缀和值,value=该前缀和出现的次数

HashMap<Integer, Integer> mp = new HashMap<>();

// 初始化:前缀和为0的情况出现1次(对应子数组从下标0开始的情况)

mp.put(0, 1);

复制代码
    // 遍历数组,计算前缀和并统计
    for (int i = 0; i < nums.length; i++) {
        // 累加当前元素,更新前缀和
        pre += nums[i];
        // 若哈希表中存在pre - k,说明存在j使得pre[i] - pre[j-1] = k,累加其出现次数
        if (mp.containsKey(pre - k)) {
            count += mp.get(pre - k);
        }
        // 将当前前缀和存入哈希表,若已存在则次数+1,否则设为1
        mp.put(pre, mp.getOrDefault(pre, 0) + 1);
    }
    // 返回结果
    return count;
}

}

复杂度分析

时间复杂度:O (n),其中 n 是数组长度。仅需遍历数组一次,哈希表的查询和插入操作均为 O (1)。

空间复杂度:O (n),哈希表最多存储 n 个不同的前缀和(极端情况如数组元素全为正数,前缀和唯一)。

相关推荐
可编程芯片开发7 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
罗西的思考7 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging
人工智能·算法·机器学习
Mr.HeBoYan9 小时前
一次持续三天才出现的丢包故障——深入解析 DPDK Memory Ordering、rte_ring 与 CPU Memory Barrier (下)
linux·网络·算法·架构·dpdk
wabs6669 小时前
关于图论【深度优先搜索的理论基础】
算法·深度优先·图论
先吃饱再说10 小时前
LeetCode 101. 对称二叉树
算法
是Dream呀10 小时前
人眼看不出的伪造,AI如何识别?实测合合信息跨模态鉴伪与去反光技术
算法
QN1幻化引擎11 小时前
SFA 信号场注意力:用8KB参数换248x KV Cache压缩,边缘设备也能跑长序列
人工智能·算法·gitee·gitlab
段一凡-华北理工大学11 小时前
向量数据库实战:选型、调优与落地~系列文章03:向量相似度算法全解:余弦、欧氏、内积,到底该用哪个?
大数据·数据库·人工智能·算法·机器学习·向量相似度·高炉炼铁
cjr_xyi12 小时前
AT1202Contest_c binarydigit 题解
c语言·c++·算法
atunet13 小时前
从算法优化到系统加速的多层级思考7
算法