01和为k的子数组

和为k的子数组

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

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

示例 1:

输入:nums = [1,1,1], k = 2
输出:2

示例 2:

输入:nums = [1,2,3], k = 3
输出:2

提示:

  • 1 <= nums.length <= 2 * 104
  • -1000 <= nums[i] <= 1000
  • -107 <= k <= 107
public int subarraySum(int[] nums, int k) {
       int res = 0;
       int pre = 0;
       Map<Integer, Integer> map = new HashMap<>();
       map.put(0, 1);
       for (int num : nums) {
           pre += num;
           if (map.containsKey(pre - k)) {
               res += map.get(pre - k);
           }
           map.put(pre, map.getOrDefault(pre, 0) + 1);
       }
       return res;
   }

考虑以 i 结尾和为 k 的连续子数组个数,我们需要统计符合条件的下标 j 的个数,其中 0≤ji 且 [j..i] 这个子数组的和恰好为 k

image-20260202214837127


01和为k的子数组
https://jiajun.xyz/2026/02/02/算法/04子串/01和为k的子数组/
作者
Lambda
发布于
2026年2月2日
许可协议