1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| class Solution:
def maxSubArray(self, nums: List[int]) -> int:
def dfs(left, right):
if left == right:
# (前缀和, 后缀和, 最大子区间和, 区间和)
return (nums[left], nums[left], nums[left], nums[left])
mid = left + (right - left) // 2
l = dfs(left, mid)
r = dfs(mid + 1, right)
# 区间 [left, right] 的最大前缀和, 最大后缀和, 最大子区间和, 区间和
max_prefix_sum = max(l[0], l[3] + r[0])
max_suffix_sum = max(r[1], r[3] + l[1])
max_subarray_sum = max(l[2], r[2], l[1] + r[0])
total_sum = l[3] + r[3]
return (max_prefix_sum, max_suffix_sum, max_subarray_sum, total_sum)
return dfs(0, len(nums) - 1)[2]
|