题目定位
这题几乎就是前缀和的标准动机题:预处理一次,每次查询 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 值得保留?
继续刷相关题
先把 前缀和 这个模式刷成体系,再去做更难变体。