题目:给定一个整数数组nums,请编写一个能够返回数组“中心下标”的方法。
中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果数组中不存在中心下标,返回-1,如果数组中有多个中心下标,应该返回最靠左边的那一个。
注意:中心下标可能出现在数组的两端。
思路分析:
1、先计算出数组元素的总和。用sum表示。
2、从数组中第一个元素开始叠加。用total表示。
3、每叠加一个元素,用sum减去叠加的元素,sum的值就会越来越小,直到和total相等。
4、最后total相当于左边的元素和,sum相当于右边的元素和。total==sum的时候就找到了中心下标。
public class ArrayCenterIndex{
public static int pivotIndex(int[] arr){
int sum = Arrays.stream(arr).sum();//通过流式计算数组中元素的和
int total = 0;
for(int i=0;i<arr.length;i++){
total += arr[i];//从第一个元素开始叠加
if(total==sum){ //当左边元素和等于右边元素和的时候,返回当前元素下标
return i;
}
sum = sum - arr[i];//数组元素总和减去已经叠加的元素
}
return -1;
}
}