md_files/Java/草稿.md
2025-03-18 12:46:59 +08:00

1.1 KiB
Raw Blame History

思路讲解

  1. 前缀和的定义
    定义前缀和 preSum[i] 为数组 nums 从索引 0 到 i 的元素和,即

    
    \text{preSum}[i] = \sum_{j=0}^{i} \text{nums}[j]
    
  2. 子数组和的关系
    对于任意子数组 nums[i+1..j](其中 0 ≤ i < j < n),其和可以表示为

    
    \text{sum}(i+1,j) = \text{preSum}[j] - \text{preSum}[i]
    

    当这个子数组的和等于 k 时,有

    
    \text{preSum}[j] - \text{preSum}[i] = k
    

    
    \text{preSum}[i] = \text{preSum}[j] - k
    
  3. 利用哈希表存储前缀和
    我们可以使用一个哈希表 prefix 来存储每个前缀和出现的次数。

    • 初始时,prefix[0] = 1,表示前缀和为 0 出现一次(对应空前缀)。
    • 遍历数组,每计算一个新的前缀和 preSum,就查看 preSum - k 是否在哈希表中。如果存在,则说明之前有一个前缀和等于 preSum - k,那么从该位置后一个位置到当前索引的子数组和为 k累加其出现的次数。
  4. 时间复杂度
    该方法只需要遍历数组一次,时间复杂度为 O(n)。