算法描述
系数:☆☆
给你一个整数数组nums
,请编写一个能够返回数组中心索引的方法。
数组中心索引是数组的一个索引,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,返回-1
。如果数组有多个中心索引,应该返回最靠近左边的那一个。
注意:中心索引可能出现在数组的两端。
示例:
输入:nums = [1, 7, 3, 6, 5, 6]
输出:3
解释:
索引 3 (nums[3] = 6) 的左侧数之和 (1 + 7 + 3 = 11),与右侧数之和 (5 + 6 = 11) 相等。
同时, 3 也是第一个符合要求的中心索引。
要符合前段部分的和与后段部分的和相同,我们可以得到以下公式
(总和 - 当前位置值)/ 2 = 当前位置的前段部分的和
有了这个公式,我们的思路也就出来了
fun solution(nums: IntArray): Int {
var totalSum = 0 // 总和
var subSum = 0 // 前段部分的和
// 计算总和
for (item in nums) {
totalSum += item
}
nums.forEachIndexed { index, item ->
// 判断是否为中心索引
if (subSum * 2 + item == totalSum) {
return index
}
subSum += item
}
return -1
}
O(n)
O(1)