返回首页

前缀和 + 哈希:子数组和为 K

一、面试常考点

1. 关键等式

pre[i] - pre[j] = k,则 j..i-1 区间和为 k

2. 哈希表作用

记录某前缀和出现次数,快速统计符合条件区间。

二、细节介绍

1. 初始化

map.set(0, 1) 表示空前缀。

2. 处理顺序

先统计答案再更新当前前缀和计数。

三、示例代码

function subarraySum(nums, k) {
  const map = new Map()
  map.set(0, 1)

  let pre = 0
  let ans = 0

  for (const x of nums) {
    pre += x
    ans += map.get(pre - k) || 0
    map.set(pre, (map.get(pre) || 0) + 1)
  }

  return ans
}

四、常用应用场景

1. 区间目标匹配

满足目标和/目标差的区间计数。

2. 实时指标检测

流式数据中快速发现满足阈值片段。