LC_寻找数组的中心索引
题目 ( 源自LeetCode ):
给一个 nums的整数数组,其中心下标定义为:左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
思路
说实话,做这道题的时候,其实最开始是有点懵逼(原谅我很菜,但是不解决会更菜,希望大家加油)。
-
根据中心索引的定义,可以将整个数组分为三个部分:
- 左侧元素的和:leftSum
- 中心索引: indexNum
- 右侧元素和: rightSum
-
步骤:
-
先求出整个数组的和
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;
}
测试代码
结果: