724 寻找数组的中心索引

from typing import List
class Solution:
# 错误的想法,刚开始想的是使用双指针的方法来计算左右两边的和,
# 但是没有考虑到会有负数的存在,所有这个方法,行不通。
def pivotIndex1(self, nums: List[int]) -> int:
if len(nums) <= 1:
return -1
left,right = 0,len(nums) - 1
left_num,right_num = nums[left],nums[right]
while left < right:
if left_num > right_num:
right -= 1
right_num += nums[right]
elif left_num < right_num:
left += 1
left_num += nums[left]
else:
left += 1
right -= 1
left_num += nums[left]
right_num += nums[right]
print(left,right)
if left_num == right_num and left == right:
return left
else:
return -1
# 那就是先算出数组的总和,然后减去左边或者右边的和,判断是否有相等的时候。
def pivotIndex(self, nums: List[int]) -> int:
# 求出数组的长度。
length = len(nums)
# 如果数组为空,直接返回。
if length == 0:return -1
# 求出数组所有数的和,定义左侧和变量。
sum_num = sum(nums)
sum_left = 0
# 遍历数组,然后进行求和、
for i in range(length):
# 左侧数组求和。
sum_left += nums[i]
# 判断是否为中心索引。
if sum_left - nums[i] == sum_num - sum_left:
return i
return -1
A = Solution()
print(A.pivotIndex([1, 7, 3, 6, 5, 6]))
print(A.pivotIndex([1]))
print(A.pivotIndex([-1,-1,-1,-1,-1,0]))
原文地址:https://www.cnblogs.com/cong12586/p/14338690.html