class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n = len(nums)
if n == 0:
return 0
a, total = -1e12, -1e12
for num in nums:
a = max(num + a, num)
total = max(a, total)
return total
分治
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n = len(nums)
if n == 0:
return 0
l, r, m, s = self.sub_array(nums, 0, n - 1)
return m
def sub_array(self, array, start, end):
if start == end:
t = array[start]
return t, t, t, t # left, right, max, sum
mid = (start + end) // 2
ll, lr, lm, ls = self.sub_array(array, start, mid)
rl, rr, rm, rs = self.sub_array(array, mid + 1, end)
l = max(ll, ls + rl)
r = max(rr, rs + lr)
m = max([lm, rm, lr + rl])
s = ls + rs
return l, r, m, s