一个序列的平衡点是这样的,它的左边的所有的元素的和应该等于右边的所有的元素的和,比如 在下面的序列A:A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0  3是一个平衡点因为: A[0]+A[1]+A[2]=A[4]+A[5]+A[6]  6也是一个平衡点因为: A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0 (零个元素的和是零) 索引7不是平衡点,因为它不是序列A的有效索引,如果你仍然不是很清楚,那么这里给出了明确的定义: 当且仅当0 ≤ k ≤ n 并且 
Σ m=0 
k −1 A[m]=Σ m=k+1 
n A[m] 时, 
整数k是序列A[0],A[1],...,A[n] 的平衡点,这里 我们假定零个元素的和为零。 请写一个函数,返回给定序列的平衡点(任意一个)如果没有平衡点则返回-1,假设这个序列可达到非常大。要用static public int equi(int a[])

解决方案 »

  1.   

    public class Test{
    public static void main(String[] args){
    int[] a={-7,1,5,2,-4,3,0};
    System.out.println("equi: "+equi(a));
    }
    public static int equi(int[] a){
    int leftSum=0,rightSum=0;            //leftSum平衡点左边元素之和,rightSum平衡点右边元素之和.
    int equiPoint=0;                     //假设平衡点为0
    for(int i=1;i<a.length;i++){         //先把右和求出来
    rightSum+=a[i];
    }
    if(leftSum==rightSum) return equiPoint;
    for(equiPoint=1;equiPoint<a.length;equiPoint++){
    leftSum=leftSum+a[equiPoint-1];                  //新的左和为原来左和加平衡点左边的元素.
    rightSum=rightSum-a[equiPoint];                 //新的右和为原来的右和减支平衡点的元素
    if(leftSum==rightSum){
    break;
    }
    }
    if(equiPoint<a.length) return equiPoint;         
    return -1;
    }
    }
      

  2.   


            int leftSum=0,rightSum=0;            //leftSum平衡点左边元素之和,rightSum平衡点右边元素之和.
            int equiPoint=0;                     //假设平衡点为0
            for(int i=1;i<a.length;i++){         //先把右和求出来
                rightSum+=a[i];
            }
    我很伤心,给出具体算法,这一步我也看不懂