JavaScript算法系列-求一個數組的中心索引

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章