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.

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