当前位置: 面试刷题>> 中心索引 (经典算法题500道)


完整题目描述

中心索引:给定一个整数数组,找到一个索引,使得该索引左侧所有元素之和等于该索引右侧所有元素之和。如果这样的索引存在,则返回它;否则,返回 -1。注意,索引是从0开始的。

示例

给定数组:nums = [1, 7, 3, 6, 5, 6]

  • 索引0的左侧和为0(因为索引0左侧没有元素),右侧和为7+3+6+5+6 = 27
  • 索引1的左侧和为1,右侧和为3+6+5+6 = 20
  • 索引2的左侧和为1+7 = 8,右侧和为6+5+6 = 17
  • 索引3的左侧和为1+7+3 = 11,右侧和为5+6 = 11,此时左侧和等于右侧和。
  • 索引4和5的右侧和都将小于左侧和(不再详述)。

因此,返回索引3,因为它满足条件。

PHP 代码示例

function findCenterIndex($nums) {
    $totalSum = array_sum($nums);
    $leftSum = 0;
    for ($i = 0; $i < count($nums); $i++) {
        $rightSum = $totalSum - $leftSum - $nums[$i];
        if ($leftSum == $rightSum) {
            return $i;
        }
        $leftSum += $nums[$i];
    }
    return -1;
}

// 示例
$nums = [1, 7, 3, 6, 5, 6];
echo findCenterIndex($nums); // 输出: 3

Python 代码示例

def findCenterIndex(nums):
    total_sum = sum(nums)
    left_sum = 0
    for i in range(len(nums)):
        right_sum = total_sum - left_sum - nums[i]
        if left_sum == right_sum:
            return i
        left_sum += nums[i]
    return -1

# 示例
nums = [1, 7, 3, 6, 5, 6]
print(findCenterIndex(nums))  # 输出: 3

JavaScript 代码示例

function findCenterIndex(nums) {
    let totalSum = nums.reduce((a, b) => a + b, 0);
    let leftSum = 0;
    for (let i = 0; i < nums.length; i++) {
        let rightSum = totalSum - leftSum - nums[i];
        if (leftSum === rightSum) {
            return i;
        }
        leftSum += nums[i];
    }
    return -1;
}

// 示例
const nums = [1, 7, 3, 6, 5, 6];
console.log(findCenterIndex(nums)); // 输出: 3

码小课网站中有更多相关内容分享给大家学习,涵盖各种算法和数据结构,帮助你更好地准备面试和提升自己的编程技能。

推荐面试题