LeetCode-53 最大子序和
阿新 • • 發佈:2021-10-16
LeetCode-53 最大子序和
1.暴力求解
遍歷陣列。分別求出每個子序列的和,再求最大值。
Time Limit Exceeded
class Solution: def maxSubArray(self, nums: List[int]) -> int: max=-float('inf') for i in range(len(nums)): sum=0 for j in range(i,len(nums)): sum+=nums[j] if sum>max: max=sum return max
2. 動態規劃
對於元素i,,以i為結尾的最大子序和,只取決於前(i-1)個元素中,以[i-1]號元素為結尾的最大子序和
對於前i-1個元素的子序和,存在兩種情況
-
前i-1個元素最大子序和大於0,則前i個元素的最大子序等於 前i-1元素最大子序和+當前元素
-
前i-1個元素最大子序和小於0,則前i個元素的最大子序等於 元素
class Solution: def maxSubArray(self, nums: List[int]) -> int: sum_n_1=nums[0] sum=nums[0] for i in range(1,len(nums)): if sum_n_1>0: sum_n_1+=nums[i] else: sum_n_1=nums[i] if sum_n_1>sum: sum=sum_n_1 return sum