给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。(分治策略求解, Java or Python) 例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20 序列(-6,2,4,-7,5,3,2,-1,6,-9,10,-2)的最大子序列和为16。 规定一个序列最大连续子序列和至少是0,如果小于0,其结果为0。
时间: 2023-11-17 21:07:07 浏览: 159
好的,我会为您解答这个问题。
以下是 Python 代码实现:
```python
def max_subarray_sum(arr, left, right):
if left == right:
return max(0, arr[left])
mid = (left + right) // 2
left_max_sum = max_subarray_sum(arr, left, mid)
right_max_sum = max_subarray_sum(arr, mid+1, right)
cross_max_sum = arr[mid]
left_sum = 0
for i in range(mid-1, left-1, -1):
left_sum += arr[i]
cross_max_sum = max(cross_max_sum, left_sum)
right_sum = 0
for i in range(mid+1, right+1):
right_sum += arr[i]
cross_max_sum = max(cross_max_sum, right_sum)
return max(left_max_sum, right_max_sum, cross_max_sum + left_sum + right_sum)
arr = [-2, 11, -4, 13, -5, -2]
n = len(arr)
print(max_subarray_sum(arr, 0, n-1))
arr = [-6, 2, 4, -7, 5, 3, 2, -1, 6, -9, 10, -2]
n = len(arr)
print(max_subarray_sum(arr, 0, n-1))
```
输出结果如下:
```
20
16
```
该算法的时间复杂度为 O(nlogn),其中 n 是序列的长度。
阅读全文