优化C++代码:利用前缀和计算数组区间和
你提供的代码功能是读取数组`a`和询问数组`k`,对每个询问的`k[i]`,计算数组`a`中从第`k[i]`个元素到最后一个元素的和并输出。这段代码的时间复杂度较高,为$O(m\times n)$,可以使用前缀和来优化,将时间复杂度降低到$O(m + n)$。 ### 优化后的代码 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, m; cin >> n >> m; // 存储数组a vector<int> a(n + 1); for (int i = 1; i <= n; i++) { cin >> a[i]; } // 计算前缀和数组 vector<int> prefixSum(n + 1, 0); for (int i = 1; i <= n; i++) { prefixSum[i] = prefixSum[i - 1] + a[i]; } // 存储询问的k vector<int> k(m); for (int i = 0; i < m; i++) { cin >> k[i]; } // 处理每次询问 for (int i = 0; i < m; i++) { // 利用前缀和计算区间和 int sum = prefixSum[n] - prefixSum[k[i] - 1]; cout << sum << endl; } return 0; } ``` ### 代码解释 1. **前缀和数组**:`prefixSum[i]`表示数组`a`中前`i`个元素的和。 2. **计算区间和**:对于询问的`k[i]`,从第`k[i]`个元素到第`n`个元素的和可以通过`prefixSum[n] - prefixSum[k[i] - 1]`计算得到。 ######[AI问答 | 466点数解答 | 2026-04-08 21:23:04]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)357
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)243
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)255
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)245
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)18
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)343
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)248
- 精准优化:明确需求,开启高效提升之旅! (字节豆包 | 52点数解答 | 2026-02-09 16:44:46)46
- 代码再升级:优化版“获取dump”代码,多机制保障数据读取与保存(字节豆包 | 734点数解答 | 2026-02-10 01:23:31)72
- 代码深度优化:全面检查异常、灵活读取内存,提升可读性与可维护性(字节豆包 | 959点数解答 | 2026-02-10 01:24:14)39
- C++ 代码实现自定义运算 x@y = x² + y² - xy 及 x@(x+y) 计算(DeepSeek | 215点数解答 | 2025-12-13 15:08:14)80
- C++ 实现根据输入正整数奇偶性计算偶数和或约数和(字节豆包 | 838点数解答 | 2026-02-28 20:23:59)33