题目描述:数组中某个下标,左右两边的元素之和相等,该下标即为中心下标
思路:
①:先统计出整个数组的总和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