优化代码:解决原代码超时问题,将复杂度从 $O(n^2)$ 降至 $O(n)$
这段代码的时间复杂度是 $O(n^2)$,当 $n$ 较大时,会导致超时(TLE)。可以通过数学推导将时间复杂度优化到 $O(n)$。 推导过程如下: 假设数组元素为 $a_1, a_2, \cdots, a_n$,要求的和 $S=\sum_{1\leq i < j\leq n}a_i\times a_j$。 已知 $(a_1 + a_2+\cdots+a_n)^2=\sum_{i = 1}^{n}a_i^2+2\sum_{1\leq i < j\leq n}a_i\times a_j$。 则 $\sum_{1\leq i < j\leq n}a_i\times a_j=\frac{(\sum_{i = 1}^{n}a_i)^2-\sum_{i = 1}^{n}a_i^2}{2}$。 以下是优化后的代码: ```cpp #include <iostream> using namespace std; int main() { int n; // 读取整数 n cin >> n; int a[200005]; long long sum = 0; // 存储数组元素的和 long long squareSum = 0; // 存储数组元素平方的和 // 读取 n 个整数并计算元素和与元素平方和 for (int i = 0; i < n; i++) { cin >> a[i]; sum += a[i]; squareSum += (long long)a[i] * a[i]; } // 根据公式计算结果 long long S = (sum * sum - squareSum) / 2; // 输出结果 cout << S << endl; return 0; } ``` ######[AI问答 | 433点数解答 | 2026-05-10 16:04:01]
- C++求解序列或与运算和差值:避O(nq)复杂度及数据处理要点(字节豆包 | 534点数解答 | 2025-10-17 20:05:07)75
- C3期末:精准求解 3 - 20 范围内数列第 k 项值及注意要点(字节豆包 | 242点数解答 | 2025-06-15 11:26:19)165
- C++求解:查找3 - 20项数列第k项值及注意要点(字节豆包 | 325点数解答 | 2025-06-15 11:27:11)185
- 解析React 15与Vue 2:从O(n^3)到O(n),Diff算法时间复杂度计算及性能对比 (阿里通义 | 379点数解答 | 2023-11-09 01:49:19)357
- 缜密逻辑,全新无名杀“风餐”技能代码精心打造与深度解析 (字节豆包 | 469点数解答 | 2025-04-05 11:37:06)274
- 精准优化:明确需求,开启高效提升之旅! (字节豆包 | 52点数解答 | 2026-02-09 16:44:46)64
- 代码再升级:优化版“获取dump”代码,多机制保障数据读取与保存(字节豆包 | 734点数解答 | 2026-02-10 01:23:31)88
- 代码深度优化:全面检查异常、灵活读取内存,提升可读性与可维护性(字节豆包 | 959点数解答 | 2026-02-10 01:24:14)59
- 破解Jenkins构建Java项目“数据收集等待过长”难题的实用攻略( | 389点数解答 | 2024-01-18 09:27:30)345
- Jenkins 构建 Java 项目“数据收集等待过长”难题的 10 大解决策略(百度文心 | 551点数解答 | 2024-01-18 09:27:54)302
- C++ 求解整数减少至 0 使奇数次数最少的最小纠结次数问题(字节豆包 | 229点数解答 | 2024-08-21 16:33:58)276
- C++ 实现按复杂规则计算业务员工资,附完整代码!(字节豆包 | 337点数解答 | 2024-11-18 17:48:36)301