题目:寻找数组的中心下标
描述:给定一个整数数组nums,请编写一个能够返回数组“中心下标”的方法。
中心下标:中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
要求:如果数组不存在中心下标,返回-1。如果数组有多个中心下标,应该返回最靠近左边的那一个。
举例:输入:[1,7,3,6,5,6],输出:3
注意:中心下标可能出现在数组的两端。
思路:要求有多个中心下标,返回最左边那一个,那么需要我们从左边开始遍历。先统计出整个数组的总和,然后从第一个元素开始叠加,总和递减当前元素,叠加递增当前元素,直到两个值相等。
package od;
import java.util.Arrays;
/**
* 寻找数组的中心索引
* 给定一个整数数组nums,请编写一个能够返回数组“中心下标”的方法
* 原文地址:https://www.codernav.com/2799.html
*/
public class Odtest10 {
public static void main(String[] args) {
int index = f(new int[]{1, 7, 3, 6, 5, 6});
int index1 = f1(new int[]{1, 7, 3, 6, 5, 6});
System.out.println(index);
System.out.println(index1);
}
/**
* 1、先统计出整个数组的总和,然后从第一个元素开始叠加
* 2、总和递减当前元素,叠加递增当前元素,知道两个值相等
*/
private static int f(int[] nums) {
int total = Arrays.stream(nums).sum();
int left = 0;
for (int i = 0; i < nums.length; i++) {
if (left + nums[i] == total - left) {
return i;
}
left += nums[i];
}
return -1;
}
public static int f1(int[] nums) {
int sum1 = Arrays.stream(nums).sum();
int sum2 = 0;
for (int i = 0; i < nums.length; i++) {
sum2 += nums[i];
if (sum1 == sum2) {
return i;
}
sum1 = sum1 - nums[i];
}
return -1;
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...
