給定一個整數類型的數組 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.