酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++求解数组平衡点下标的高效算法实现

根据问题描述,需要找到数组中左侧和等于右侧和的下标。若存在多个平衡点,通常取第一个。若不存在,可能需要输出-1(题目未明确,但常见做法)。以下为C++实现。 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> a(n); long long total = 0; for (int i = 0; i < n; i++) { cin >> a[i]; total += a[i]; } long long leftSum = 0; for (int i = 0; i < n; i++) { if (leftSum == total - leftSum - a[i]) { cout << i + 1 << endl; // 输出下标从1开始 return 0; } leftSum += a[i]; } cout << -1 << endl; // 无平衡点 return 0; } ``` 算法思路: - 先计算总和`total`。 - 遍历每个下标i,维护`leftSum`为i左侧所有数之和。 - 判断条件:`leftSum == total - leftSum - a[i]`,即左侧和等于右侧和。 - 遍历过程时间复杂度O(n),空间O(1)(除存储数组外)。 💡 注意点: - 使用`long long`防止溢出,因为n最大100000,a[i]最大1000,总和最大1e8,int足够,但稳妥使用long long。 - 下标从0开始遍历,输出时加1转换为从1开始。 - 若没有平衡点,输出-1(可根据题目要求调整)。 ######[AI问答 | 386点数解答 | 2026-08-29 21:57:17]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]