1. 程式人生 > >【Leetcode_總結】53. 最大子序和 - python

【Leetcode_總結】53. 最大子序和 - python

連結:https://leetcode-cn.com/problems/maximum-subarray/description/

Q:

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

進階:

如果你已經實現複雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。


思路:設定一個值,能夠記錄遍歷過程中前方陣列中的最大值,程式碼如下

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        m = nums[0]
        pre = nums[0]
        for i in range(1, len(nums)):
            if pre < 0:
                pre = nums[i]
            else:
                pre += nums[i]
            if pre > m:
                m = pre
        return m

 還有一種方法比較巧妙,計算前後兩個之間的最大者當做nums[i] 的值 

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        for i in range(1, len(nums)):                            
            # 比較 nums[i] 與 nums[i-1] + nums[i] ,將大者 作為真正的 nums[i]
            nums[i]  = max(nums[i],nums[i] + nums[i - 1],)
        return max(nums)