求兩個子陣列最大和
阿新 • • 發佈:2022-04-18
題目
在一個數組中找兩個子陣列,求其最大和(子陣列不重合,不空)
解法
從右向左遍歷,找到右邊子陣列的最大和
再從左向右遍歷,找到左邊子陣列的最大和的同時,找這兩者的最大和
兩遍 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))