1. 程式人生 > 其它 >求兩個子陣列最大和

求兩個子陣列最大和

題目

在一個數組中找兩個子陣列,求其最大和(子陣列不重合,不空)

 

解法

從右向左遍歷,找到右邊子陣列的最大和

再從左向右遍歷,找到左邊子陣列的最大和的同時,找這兩者的最大和

兩遍 dp 即可

 

程式碼

def maxTwoSubStringSum(nums):
    ans = -float('inf')
    leftAns = []
    cur = 0
    
    # from right to left
    for i in range(len(nums)-1, -1, -1):
        if cur < 0:
            cur = nums[i]
        
else: cur += nums[i] ans = max(cur, ans) leftAns.append(ans) leftAns = leftAns[::-1] ans = -float('inf') rightAns = -float('inf') cur = 0 # from left to right for i in range(len(nums)): if cur < 0: cur = nums[i] else
: cur += nums[i] rightAns = max(cur, rightAns) ans = max(ans, rightAns + leftAns[i]) return ans nums = [-1,2,3,4,1,-7,5,0] print(maxTwoSubStringSum(nums)) nums = [-1,2,3,4,1,-100,5,0] print(maxTwoSubStringSum(nums))