1. 程式人生 > 其它 >LeetCode-53 最大子序和

LeetCode-53 最大子序和

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個元素的子序和,存在兩種情況

  1. 前i-1個元素最大子序和大於0,則前i個元素的最大子序等於 前i-1元素最大子序和+當前元素

  2. 前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