您的位置:首页 > 其它

LeetCode 53 分治算法,求最大子串

2017-03-06 19:05 597 查看
本来想用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: