题目:寻找数组的中心下标
描述:给定一个整数数组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; } }
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...