#303
Easy
前缀和

Range Sum Query - Immutable

快速回答多个不可变数组区间和查询。

ArrayPrefix Sum

题目定位

这题几乎就是前缀和的标准动机题:预处理一次,每次查询 O(1)。

关键观察

[l, r] 的区间和就是 prefix[r + 1] - prefix[l]。

目标复杂度

O(1) query / O(n)

这题的解法思路怎么拆

1

这题几乎就是前缀和的标准动机题:预处理一次,每次查询 O(1)。

2

[l, r] 的区间和就是 prefix[r + 1] - prefix[l]。

3

先定义累计状态代表什么。

4

一趟扫描构造前缀。

参考实现

Python
# Generic pattern template
prefix = [0] * (len(nums) + 1)
for i, value in enumerate(nums):
    prefix[i + 1] = prefix[i] + value

range_sum = prefix[r + 1] - prefix[l]

常见坑点

warning

数组下标和前缀下标之间 off-by-one。

warning

忘记在前缀数组最前面放 0。

高频追问

如果还支持更新,数据结构要怎么变?

为什么前导 0 值得保留?

继续刷相关题

先把 前缀和 这个模式刷成体系,再去做更难变体。

view_week回到模式页
LeetCode 303. Range Sum Query - Immutable 题解思路 | Interview AiBox