寻找数组的中心下标

题目描述:数组中某个下标,左右两边的元素之和相等,该下标即为中心下标
思路:
在这里插入图片描述

①:先统计出整个数组的总和sum,然后从第一个元素开始叠加,值为total,如果这个total和sum相等,那么返回该下标,否则,总和减去该元素sum-num[i],继续叠加元素total+=num[i],重复上面的操作。
②: 和①不同的地方在于判别条件,这里只需要判别total2-num[i]==sum,如上图所示,它们都有一个共同的元素,所以total2-num[i]如果等于数组总和,就说明找到了中心下标

package ArraysCenterIndex;

/**
 * @author:MrQ
 * @date 2021/7/26-9:24
 */

/**
 * 求数组的"中心下标" 如果该数组中心下标的左侧之和与右侧之和相等,那么返回该下标的值
 *
 * 首先先把数组的总和求出来,记为sum
 * 然后从第一个元素开始遍历,求总和记为total
 * 往后遍历一个数,total+=num[i]
 * 如果total和sum相等的话,就说明找到了"中心下标" (二者有一个交集,就是num[i])
 * 如果不相等的话,sum-=num[i]
 * 进行下一轮判断
 *
 */
public class arraysCenterIndex {
    public static void main(String[] args) {
        //下面这个例子 total = 1+7+3+6=17   sum = 28-1-7-3=17,此时的下标为3
        System.out.println(getIndex(new int[]{1, 7, 3, 6, 5, 6}));
        System.out.println(gainIndex(new int[]{1, 7, 3, 6, 5, 6}));
    }
    public static int getIndex(int []num){
        int sum=0;
        for(int i=0;i<num.length;i++){
            sum+=num[i];
        }
        int total = 0;
        for (int i=0;i<num.length;i++){
            total+=num[i];
            if (total==sum){
                return i;
            }
            sum-=num[i];
        }
        return -1;//没有找到对应的下标
    }
    public static int gainIndex(int []num){
        int total=0;
        int sum =0;
        for (int i=0;i<num.length;i++)
            sum+=num[i];
        for (int i=0;i<num.length;i++){
            total+=num[i];
            if (total*2-num[i] == sum)//左边之和*2-中间多包含的元素=sum
                return i;
        }
        return -1;//没有找到对应下标
    }
}

结果都是3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值