本文共 955 字,大约阅读时间需要 3 分钟。
题目 ( 源自LeetCode ):
给一个 nums的整数数组,其中心下标定义为:左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
思路
说实话,做这道题的时候,其实最开始是有点懵逼(原谅我很菜,但是不解决会更菜,希望大家加油)。
根据中心索引的定义,可以将整个数组分为三个部分:
步骤:
先求出整个数组的和
int sum = 0;for(int element : nums){ sum +=element;}
用for循环遍历数组,依次求出 leftSum ( 这也叫做求前缀和 )
int leftSum = 0;for(int i = 0; i< nums.length-1; i++){ leftSum += nums[i];}
那我们设想,中心索引存在
leftSum = sum - rightSum -indexNum
中心索引存在的同时: leftSum = rightSum。
leftSum = sum - leftSum -indexNum
最终代码:
public static int getCentralIndex(int[] nums) { // 求整个数组的和 int sum = 0; for (int element : nums) { sum += element; } // 依次求前缀和,并且判断是否有中心索引 int leftSum =0; for (int i = 0; i < nums.length; i++) { // 判断中心索引是否成立 if (leftSum == sum - leftSum - nums[i]) { return i; } leftSum += nums[i]; } return -1;}
测试代码
结果:
转载地址:http://whuen.baihongyu.com/