You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组平衡点查找代码输出-1错误,请求排查(附C++实现)

代码问题排查与修正

你的代码存在几个关键问题,导致无法正确找到平衡点:

1. 数组索引越界

C++数组采用0-based索引,有效范围是0到n-1,但你的循环用了i从1到n,访问a[i]会超出数组边界,触发未定义行为(比如读取垃圾值,导致总和计算错误)。

2. 平衡点判断逻辑错误

当前判断条件if(tempsum==sum+a[i])完全不符合平衡点的定义:

  • 平衡点要求当前位置前所有元素的和 = 当前位置后所有元素的和
  • 你的变量逻辑混乱:sum在循环中是当前位置后方元素的和,tempsum是当前位置及后方元素的和,两者的关系无法直接对应平衡点的判断条件。

3. 遍历方向错误

题目要求找第一个平衡点(从左到右的第一个符合条件的位置),但你从右往左遍历,找到的是最后一个符合条件的位置,不符合需求。

4. 变量类型溢出风险

数组元素是long long类型,但sum和tempsum用了int,当数组元素总和超过int的取值范围时,会发生溢出,导致计算结果错误。


修正后的代码

//{ Driver Code Starts
#include <iostream>
using namespace std;

// } Driver Code Ends
class Solution{
public:
// Function to find equilibrium point in the array.
// a: input array
// n: size of array
 int equilibriumPoint(long long a[], int n) {
    // 边界情况:数组只有一个元素,直接返回1
    if(n == 1) return 1;
    
    // 计算数组总总和,用long long避免溢出
    long long totalSum = 0;
    for(int i = 0; i < n; i++){
        totalSum += a[i];
    }
    
    long long leftSum = 0;
    for(int i = 0; i < n; i++){
        // 总总和 = leftSum + a[i] + rightSum
        // 平衡点要求leftSum == rightSum,即totalSum - a[i] == 2*leftSum
        if(totalSum - a[i] == 2 * leftSum){
            // 返回1-based索引
            return i + 1;
        }
        leftSum += a[i];
    }
    
    // 没有找到平衡点
    return -1;
}
};

修正说明

  • 改用0-based索引遍历数组,避免越界;
  • 用long long类型存储总和,防止溢出;
  • 从左到右遍历,确保找到第一个平衡点;
  • 正确的判断逻辑:利用总总和 = 左和 + 当前元素 + 右和,当左和等于右和时,总总和 - 当前元素 = 2*左和。

内容的提问来源于stack exchange,提问作者iamcoding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:10:26