题目
给你一个整数数组 nums ,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。
例:
输入:nums = [1, 7, 3, 6, 5, 6]
输出:3
解释:
中心下标是 3 。
左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。
方法
- numSum 表示数组 nums 所有数字的和
- leftSum 表示包括中心下标对应的数字及其左边所有数字的和,rightSum 表示包括中心下标对应数字及其右边所有数字的和
※ 根据题目中心下标的定义,左侧所有数字相加的和等于右侧所有数字相加的和,那么两侧同时加上中心下标对应的数字,两个和仍相等 - 从左到右进行循环,不断计算 leftSum 和 rightSum 的值,并判断二者是否相等,若相等,则返回此时的下标 i
class Solution(object):
def pivotIndex(self, nums):
numSum = sum(nums)
leftSum, rightSum = 0, 0
for i in range(len(nums)):
leftSum += nums[i]
rightSum = numSum - leftSum + nums[i]
if leftSum == rightSum:
return i
return -1