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]
  |