【Leetcode_總結】53. 最大子序和 - python
阿新 • • 發佈:2018-12-15
連結: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)