def max_subarray(nums): if len(nums) == 1: return nums[0] mid = len(nums) // 2 left_max = max_subarray(nums[:mid]) right_max = max_subarray(nums[mid:]) cross_max = max_cross_subarray(nums, mid) return max(left_max, right_max, cross_max)

def max_cross_subarray(nums, mid): left_sum = float('-inf') curr_sum = 0 for i in range(mid-1, -1, -1): curr_sum += nums[i] left_sum = max(left_sum, curr_sum) right_sum = float('-inf') curr_sum = 0 for i in range(mid, len(nums)): curr_sum += nums[i] right_sum = max(right_sum, curr_sum) return left_sum + right_sum

nums = list(map(int, input().split())) print(max_subarray(nums)

给定一个整数序列找出一个具有最大和的连续子数组。比如:输入:-2 1 -3 4 -1 2 1 -5 4输出:6用python实现使用分治法

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

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