C++ 利用前缀和解决多次区间求和询问问题
### 🔍问题分析 本题的目标是进行多次询问,每次询问给出一个数 `k`,要求计算数组 `a` 中前 `k - 1` 个元素的和。为了避免每次询问都重新计算前 `k - 1` 个元素的和,我们可以使用前缀和的方法,先预处理出数组的前缀和,这样每次询问就可以在 $O(1)$ 的时间复杂度内得到结果。 ### 💻代码实现 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, m; // 输入数字的个数 n 和询问的次数 m cin >> n >> m; vector<int> a(n + 1); vector<int> prefixSum(n + 1, 0); // 输入 n 个数字 for (int i = 1; i <= n; ++i) { cin >> a[i]; // 计算前缀和 prefixSum[i] = prefixSum[i - 1] + a[i]; } // 进行 m 次询问 for (int i = 0; i < m; ++i) { int k; cin >> k; // 输出前 k - 1 个元素的和 cout << prefixSum[k - 1] << endl; } return 0; } ``` ### 📝代码解释 1. **输入处理**:首先读取数字的个数 `n` 和询问的次数 `m`,然后使用 `vector` 存储数组 `a` 和前缀和数组 `prefixSum`。 2. **前缀和计算**:通过循环遍历数组 `a`,计算前缀和数组 `prefixSum`。`prefixSum[i]` 表示数组 `a` 中前 `i` 个元素的和。 3. **询问处理**:对于每次询问,读取 `k`,并输出 `prefixSum[k - 1]`,即数组 `a` 中前 `k - 1` 个元素的和。 ### ⚙️复杂度分析 - **时间复杂度**:预处理前缀和的时间复杂度为 $O(n)$,每次询问的时间复杂度为 $O(1)$,因此总的时间复杂度为 $O(n + m)$。 - **空间复杂度**:需要额外的 $O(n)$ 空间来存储前缀和数组。 ### 🚀开发建议 - **边界检查**:在实际应用中,需要检查输入的 `k` 是否在合法范围内,避免数组越界。 - **数据类型**:如果数组元素和前缀和可能会超出 `int` 的范围,建议使用 `long long` 类型。 - **代码可读性**:可以将前缀和的计算和询问处理封装成函数,提高代码的可读性和可维护性。 ### 📚学习资源 - [C++ 官方文档](https://en.cppreference.com/w/):提供了 C++ 语言的详细文档和参考资料。 - [《C++ Primer》](https://book.douban.com/subject/5387457/):一本经典的 C++ 入门书籍,适合初学者学习。 ######[AI写代码神器 | 742点数解答 | 2026-08-01 20:31:51]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)427
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)314
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)314
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)303
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)212
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)245
- 用Python轻松将PPT每页转为图片,附代码示例!(阿里通义 | 315点数解答 | 2024-04-23 10:01:04)1480
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)433
- Winform开发:含验证与清空功能的注册页面实现(GPT | 5266点数解答 | 2024-06-14 16:04:40)534
- Python 实战:购物折扣计算、列表求和与平方数推导代码全解(字节豆包 | 235点数解答 | 2024-10-28 14:46:54)271
- Python 实现:在 Windows 系统将 PPT 每页轻松转为图片(百度文心 | 692点数解答 | 2024-10-30 18:08:44)448
- C语言巧解:计算整数区间内最遥远素数差值(阿里通义 | 428点数解答 | 2024-11-22 14:53:33)215