力扣热门100题之和为K的子数组

核心原理

1. 什么是前缀和?

preSum[i] = 数组前 i 个元素的总和

  • 从下标 j+1i 的子数组和 = preSum[i] - preSum[j]

2. 题目转化

我们要找:

preSum[i] - preSum[j] = k

变形得到核心公式

preSum[j] = preSum[i] - k

只要前面出现过 preSum[i] - k,就找到了一个和为 k 的子数组

完整代码实现:

java 复制代码
class Solution {
    public int subarraySum(int[] nums, int k) {
        // key:前缀和  value:这个前缀和出现的次数
        Map<Integer, Integer> map = new HashMap<>();
        // 初始化:前缀和为 0 出现 1 次
        map.put(0, 1);
        
        int count = 0;  // 记录答案个数
        int preSum = 0; // 当前前缀和
        
        for (int num : nums) {
            preSum += num; // 累加,计算当前前缀和
            
            // 核心公式:如果 preSum - k 存在,就说明找到了符合条件的子数组
            if (map.containsKey(preSum - k)) {
                count += map.get(preSum - k);
            }
            
            // 把当前前缀和存入 map
            map.put(preSum, map.getOrDefault(preSum, 0) + 1);
        }
        return count;
    }
}
相关推荐
洛水水9 小时前
【力扣100题】18.随机链表的复制
算法·leetcode·链表
南宫萧幕10 小时前
规则基 EMS 仿真实战:SOC 区间划分与 Simulink 闭环建模全解
算法·matlab·控制
爱滑雪的码农10 小时前
Java基础十七:数据结构
数据结构
多加点辣也没关系10 小时前
数据结构与算法|第二十三章:高级数据结构
数据结构·算法
孬甭_12 小时前
初识数据结构与算法
数据结构
hoiii18712 小时前
孤立森林 (Isolation Forest) 快速异常检测系统
算法
c++之路13 小时前
适配器模式(Adapter Pattern)
java·算法·适配器模式
吴声子夜歌14 小时前
Java——接口的细节
java·开发语言·算法
myheartgo-on14 小时前
Java—方 法
java·开发语言·算法·青少年编程
宝贝儿好15 小时前
【LLM】第三章:项目实操案例:智能输入法项目
人工智能·python·深度学习·算法·机器人