当前位置: 面试刷题>> 中心索引 (经典算法题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 代码示例
```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 代码示例
```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 代码示例
```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
```
**码小课网站中有更多相关内容分享给大家学习**,涵盖各种算法和数据结构,帮助你更好地准备面试和提升自己的编程技能。