寻找数组的中心索引

149 阅读1分钟

题目

给你一个整数数组 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;//无中心下标
    }
}