This commit is contained in:
programmercarl
2024-07-26 11:35:38 +08:00
parent 717ad849cf
commit 2d9604baa5
20 changed files with 991 additions and 232 deletions

View File

@@ -1,6 +1,8 @@
# 58. 区间和
> 本题为代码随想录后续扩充题目还没有视频讲解顺便让大家练习一下ACM输入输出模式笔试面试必备
[题目链接](https://kamacoder.com/problempage.php?pid=1070)
题目描述
@@ -97,11 +99,11 @@ int main() {
为什么呢?
p[1] = vec[0] + vec[1];
`p[1] = vec[0] + vec[1];`
p[5] = vec[0] + vec[1] + vec[2] + vec[3] + vec[4] + vec[5];
`p[5] = vec[0] + vec[1] + vec[2] + vec[3] + vec[4] + vec[5];`
p[5] - p[1] = vec[2] + vec[3] + vec[4] + vec[5];
`p[5] - p[1] = vec[2] + vec[3] + vec[4] + vec[5];`
这不就是我们要求的 下标 2 到下标 5 之间的累加和吗。
@@ -109,15 +111,17 @@ p[5] - p[1] = vec[2] + vec[3] + vec[4] + vec[5];
![](https://code-thinking-1253855093.file.myqcloud.com/pics/20240627111319.png)
p[5] - p[1] 就是 红色部分的区间和。
`p[5] - p[1]` 就是 红色部分的区间和。
而 p 数组是我们之前就计算好的累加和,所以后面每次求区间和的之后 我们只需要 O(1)的操作。
而 p 数组是我们之前就计算好的累加和,所以后面每次求区间和的之后 我们只需要 O(1) 的操作。
**特别注意** 在使用前缀和求解的时候,要特别注意 求解区间。
如上图,如果我们要求 区间下标 [2, 5] 的区间和,那么应该是 p[5] - p[1],而不是 p[5] - p[2]。
很多录友在使用前缀和的时候,分不清前缀和的区间,建议画一画图,模拟一下 思路会更清晰
**很多录友在使用前缀和的时候,分不清前缀和的区间,建议画一画图,模拟一下 思路会更清晰**。
本题C++代码如下:
```CPP
#include <iostream>