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

张开发
2026/5/30 19:46:04 15 分钟阅读
力扣热门100题之和为K的子数组
核心原理1. 什么是前缀和preSum[i] 数组前 i 个元素的总和从下标j1到i的子数组和 preSum[i] - preSum[j]2. 题目转化我们要找preSum[i] - preSum[j] k变形得到核心公式preSum[j] preSum[i] - k只要前面出现过preSum[i] - k就找到了一个和为 k 的子数组完整代码实现class Solution { public int subarraySum(int[] nums, int k) { // key前缀和 value这个前缀和出现的次数 MapInteger, 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; } }

更多文章