class (object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 0:
return -sys.maxint
if len(nums) == 1:
return nums[0]
mid = len(nums) / 2
left_max = self.maxSubArray(nums[:mid])
right_max = self.maxSubArray(nums[mid+1:])
mid_max = self.maxMid(nums, mid)
return max(left_max, right_max, mid_max)
def maxMid(self, nums, mid):
prefix_sum = [0]
for i in range(mid+1, len(nums)):
prefix_sum.append(nums[i]+prefix_sum[-1])
postfix_sum = [0]
for i in range(mid - 1, -1, -1):
postfix_sum = [nums[i]+postfix_sum[0]] + postfix_sum
if mid == len(nums) - 1:
return nums[mid] + max(postfix_sum)
elif mid == 0:
return nums[mid] + max(prefix_sum)
else:
return nums[mid] + max(prefix_sum) + max(postfix_sum)
近期评论