算法:分治法

def maxSubArray(nums, left, right): if left == right: # 只有一个元素 return nums[left] center = (left + right) // 2 # 中心点 # 分别递归左右两侧 leftMaxSum = maxSubArray(nums, left, center) rightMaxSum = maxSubArray(nums, center+1, right) # 计算跨越中心点的最大子数组和 leftBorderSum = nums[center] leftSum = nums[center] for i in range(center-1,left-1,-1): leftSum += nums[i] if leftSum>leftBorderSum: leftBorderSum = leftSum rightBorderSum = nums[center+1] rightSum = nums[center+1] for i in range(center+2,right+1): rightSum += nums[i] if rightSum>rightBorderSum: rightBorderSum = rightSum BorderSum = leftBorderSum + rightBorderSum # 返回三个值中最大的 return max(leftMaxSum,rightMaxSum,BorderSum)

maxSubArray(nums, 0, len(nums)-1

写出伪代码leftBorderSum = numscenter leftSum = numscenter for i in rangecenter-1left-1-1 leftSum += numsi if leftSumleftBorderSum #不断更新左区块的最大值

原文地址: http://www.cveoy.top/t/topic/eqhm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录