平衡点问题
平衡点:比如int[] numbers = {1,3,5,7,8,25,4,20}; 25前面的总和为24,25后面的总和也是24,25这个点就是平衡点;假如一个数组中的元素,其前面的部分等于后面的部分,那么这个点的位序就是平衡点
要求:返回任何一个平衡点
下面是代码:
思路:
1.用一个和原数组等长的数组left[]存入从前向后各个点之前的所有节点的和;
2.同样,数组right[]存入从后向前各个节点之后的节点值之和,同时校验此时是否和对应的前面的left[i]的值相同,相同则为平衡点。
public int calcBalance(int arr[])
{
int left[]=new int[arr.length];
int right[]=new int[arr.length];
int b=arr.length-1;
for(int i=0;i<left.length;i++)
{
if(i==0)
{
left[i]=0;
}
else
{
left[i]=left[i-1]+arr[i-1];
}
}
for(;b>=0;b--)
{
if(b==arr.length-1)
{
right[b]=0;
}
else
{
right[b]=right[b+1]+arr[b+1];
}
if(left[b]==right[b])return b;
}
return b;
}