寻找数组的中心索引
最近在刷力扣上的算法题,总结了一下寻找数组中心索引的方法。
中心索引:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。
题目设定:如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。
举个栗子:
# 输入
nums = [1, 7, 3, 6, 5, 6]
# 输出
3
# 解释:
#索引 3 (nums[3] = 6) 的左侧数之和 (1 + 7 + 3 = 11),与右侧数之和 (5 + 6 = 11) 相等。
#同时, 3 也是第一个符合要求的中心索引。
方法1:暴力求解
def pivotIndex(nums):
for idx, value in enumerate(nums):
for idx, value in enumerate(nums):
if sum(nums[:idx]) == sum(nums[idx+1:]):
return idx
return -1
此方法思路简单,但速度很慢。
方法2:前缀和
def pivotIndex(nums):
S = sum(nums)
leftSum = 0
for idx, value in enumerate(nums):
if leftSum == S - value - leftSum:
return idx
leftSum += value
return -1
首先计算数组中所有元素的和S,之后遍历整个数组,当前位置左边元素的和即为leftSum,当leftSum == S-value-leftSum(当前位置右侧元素之和)时,返回当前位置索引。