用JAVA写一段程序实现查找数组的相对“平衡点”

来源:百度知道 编辑:UC知道 时间:2024/06/01 02:26:57
数组:A[0]=-7,A[1]=1,A[2]=5,A[3]=2,A[4]=-5,A[5]=1,A[6]=3
2是个平衡点:A[0]+A[1]+A[2]=A[4]+A[5]+A[6]
3也是个平衡点:A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0
数组中只要是以上这种情况就算“平衡点”
用JAVA写段程序得出这两个平衡点

外企的面试题

/*
* 整形数组平衡点问题:平衡点指左边的整数和等于右边的整数和,
* 求出平衡点位置,要求输入的数组可能是GB级
*
* 本题要求找出整型数组的一个平衡点(如果要找出所有平衡点的话,按此方法需要把每一个平衡点都存起来)
*/

public class Test {

public int findBalanceableNod( int [] a) {
if (a == null ) {
return - 1 ;
}
long sum = 0l ;
long subSum = 0l ;
for ( int i = 0 ; i < a.length; i ++ ) {
sum += a[i];
}
for ( int i = 0 ; i < a.length; i ++ ) {
if (subSum == sum - subSum - a[i]) {
return i;
} else {
subSum += a[i];
}
}
return - 1 ;
}

public static void main(String[] args) {
// 测试用例:平衡点为0位,为n-1位,为中间位,a的每个为存了Integer.MAX_VALUE(所以用sum,subSum用long型)
in