本来想用C++写的,但是写的过程中发现很多语法都记不清了,索性转回python,c++以后再练吧
问题描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4]
,
the contiguous subarray [4,-1,2,1]
has the largest sum = 6
.
解题思路:采取分治的方法,数组分为两部分s1[:len/2],s2[len/2:]
那么只有可能出现一下三种情况:
1、maxsum 在s1中
2、maxsum 在s2中
3、maxsum 跨越s1和s2,那么maxsum(s) = maxsum(s1)+maxsum(s2)
代码:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum = 0
l = len(nums)
if l == 1:
return nums[0]
left = self.maxSubArray(nums[:l//2])
right = self.maxSubArray(nums[l//2:])
s1 = nums[(l//2)-1]
lsum = 0
for i in nums[:l//2][::-1]:
lsum += i
if lsum > s1:
s1 = lsum
s2 = nums[l//2]
rsum=0
for j in nums[l//2:]:
rsum += j
if rsum > s2:
s2 = rsum
sum = s1+s2
if sum<left:
sum = left
if sum<right:
sum = right
return sum
结果:Accepted