酷代码 AI
菜单
服务商

使用 C++ 寻找数组平衡点下标

以下是解决该问题的 C++ 代码: ```cpp #include <iostream> #include <vector> // 函数用于找到平衡点下标 int findBalancePoint(const std::vector<int>& arr) { int n = arr.size(); // 计算数组所有元素的总和 int totalSum = 0; for (int num : arr) { totalSum += num; } // 左侧元素的和 int leftSum = 0; for (int i = 0; i < n; ++i) { // 右侧元素的和 int rightSum = totalSum - leftSum - arr[i]; if (leftSum == rightSum) { // 找到平衡点,返回下标(下标从 1 开始) return i + 1; } // 更新左侧元素的和 leftSum += arr[i]; } // 没有找到平衡点,返回 -1 return -1; } int main() { int n; std::cin >> n; std::vector<int> arr(n); for (int i = 0; i < n; ++i) { std::cin >> arr[i]; } int balancePoint = findBalancePoint(arr); std::cout << balancePoint << std::endl; return 0; } ``` ### 代码解释 1. **总和计算**:首先计算数组中所有元素的总和 `totalSum`。 2. **遍历数组**:从数组的第一个元素开始遍历,计算当前元素左侧元素的和 `leftSum`,并通过 `totalSum - leftSum - arr[i]` 计算当前元素右侧元素的和 `rightSum`。 3. **判断平衡点**:如果 `leftSum` 等于 `rightSum`,则当前元素的下标(下标从 1 开始)即为平衡点的下标,返回该下标。 4. **更新左侧和**:每次遍历后,更新 `leftSum`,将当前元素的值加入 `leftSum`。 5. **未找到平衡点**:如果遍历完整个数组都没有找到平衡点,则返回 -1。 ### 复杂度分析 - **时间复杂度**:$O(n)$,其中 $n$ 是数组的长度。需要遍历数组两次,一次计算总和,一次寻找平衡点。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间。 ######[AI问答 | 571点数解答 | 2026-05-30 21:22:13]

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