最大子序和(分治法,python)

题目描述:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray

思路:
采用分治算法递归求解,时间复杂度为log(n)

代码:

class Solution:
    def __init__(self,nums):
        self.nums=(nums)
        self.result=self.maxSubArray(self.nums)
    def maxSubArray(self,nums):
        low=0
        high=len(nums)-1
        max_=self.findin_edge(low,high,nums)
        return max_
    def findin_edge(self,low,high,nums):
        if low==high:
            return nums[low]
        mid=int((low+high)/2)  #'分界点'
        left_sum=self.findin_edge(low,mid,nums)
        right_sum=self.findin_edge(mid+1,high,nums)
        media_sum=self.findin_middle(low,high,mid,nums)
        
        return max(left_sum,right_sum,media_sum)
        
    def findin_middle(self,low,high,mid,nums):
        i=mid
        sum_=0
        left=0
        while i>=low:
            sum_+=nums[i]
            if sum_>left:
                left=sum_
            i-=1
        j=mid+1
        sum_=0
        right=0
        while j<=high:
            sum_+=nums[j]
            if sum_>right:
                right=sum_
            j+=1
            
        return left+right
            
        
        
if __name__=='__main__':
    nums=[-2,1,-3,4,-1,2,1,-5,4]
    solution=Solution(nums)
    result=solution.result
    print('最大子序列之和为:'+str(result))

运行结果:
最大子序列之和为:6

你可能感兴趣的:(最大子序和(分治法,python))