给定一个整数类型的数组 nums,请编写一个能够返回数组“中心索引”的方法。
我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
思路:假如存在该中心索引i,那么此时记数组nums[]所有元素的和为sum,该中心索引左边的数列之和为left sum,右边为right sum,那么满足
leftSum + nums[i] + rightSum = sum.那么可以导出
leftSum = rightSum = ( sum - nums[i] ) /2 ;一个简单的程序如下
/**
* @param {number[]} nums
* @return {number}
*/
var pivotIndex = function(nums) {
/* 1.计算出该数组内所有元素的和 foo
2.遍历该数组,当前元素索引记为i,那么从0到i-1元素的和应该满足sum = (foo - nums[i])/2
*/
if (nums.length === 1) {
return 0;
}
let arraySum = 0;
let currentSum = 0;
for (let i=0;i<nums.length;i++) {
arraySum += nums[i];
}
for (let k=0;k<nums.length;k++) {
var currentNum = k-1 >=0 ? nums[k-1] : 0;
currentSum += currentNum;
if (currentSum === (arraySum-nums[k])/2) return k;
}
return -1;
};
需要稍微注意下的就是,假如第一个数就是中心索引的情况,那么此时左边的leftSum应该为0.