def maxCrossSum(nums, left, right):
mid = int((left+right) / 2)
# 初始化为无穷小
left_max = float('-inf')
# 倒序遍历左序列,得到从中见到左边延伸的最大值
left_sum = 0
for i in range(mid, left-1, -1):
left_sum += nums[i]
if left_sum > left_max:
left_max = left_sum
# 对右边做同样的事
right_max = float('-inf')
right_sum = 0
for i in range(mid+1, right+1):
right_sum += nums[i]
if right_sum > right_max:
right_max = right_sum
return right_max + left_max
def maxSum(nums, left, right):
res = float('-inf')
if left == right:
return nums[left]
mid = int((left+right) / 2)
left_sum = maxSum(nums, left, mid)
right_sum = maxSum(nums, mid+1, right)
cross_sum = maxCrossSum(nums, left, right)
return max(max(left_sum, right_sum), cross_sum)