dp連續子陣列的最大和求解
阿新 • • 發佈:2020-07-24
dp連續子陣列的最大問題求解:
思路:
1.dp[i] 表示以第i個元素為末尾元素的子序列最大和
2.只有一個元素時,該元素即最大
3.當dp[i-1]為負數時,對第i個元素產生負影響;為正數時,比較加上第i個元素值是否變大,dp[i] 為nums[i]與dp[i-1]+nums[i]中較大的元素
狀態方程:
dp[i] = nums[i] ;dp[i-1] <=0
dp[i] = max(dp[i-1]+nums[i],nums[i]);dp[i-1] > 0
例題:
輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6
class Solution: def maxSubArray(self, nums: List[int]) -> int: dp = [0 for i in range(len(nums))] if len(nums) == 1: # 只有一個元素,選定該元素 return nums[0] dp[0] = nums[0] for i in range(1,len(nums)): if dp[i-1] <= 0: # 該元素之前的序列和產生負影響 dp[i] = nums[i] else: dp[i] = max(dp[i-1] + nums[i],nums[i]) # 為正影響時,判斷加上該元素是否得到更大的和 mmax = dp[0] for i in range(1,len(dp)): # 取出dp中最值 if dp[i] > mmax: mmax = dp[i] return mmax