题目
给你一个整数数组 nums,请编写一个能够返回数组 “中心下标” 的方法。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。
大致思路:分别计算index下标两边的总和,如果相等(l_sum==r_sum),则index为中心下标pivo,还有一种思路求出来左侧到index的和然后乘2再加上nums[index]等于总和(l_sum*2+nums[index]==0)
class Solution{
public int pivoIndex(int[] nums){
int sum = 0,index;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];//计算总和
}
if(sum-nums[0]==0){
return 0;//该情况是中心下标在0位置
}
for (index=1;index<nums.length;index++){
//一般情况以及中心下标在数组尾部
int l_sum=0,r_sum=0;
for (int i = 0; i < index; i++) {
l_sum+=nums[i];
}
for (int j = index+1; j < nums.length; j++) {
r_sum+=nums[j];
}
if (r_sum==l_sum){
return index;
}
}
return -1;//无中心下标
}
}