1. 程式人生 > >[leetcode]53. Maximum Subarray 最大連續子串python實現【medium】

[leetcode]53. Maximum Subarray 最大連續子串python實現【medium】

http://blog.csdn.net/zl87758539/article/details/51676108

題目:

Maximum Subarray
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

題目是說,給你一串數,有正有負 要求出最大的連續子串。

其實就是標準的動態規劃問題:
隨著遍歷這個陣列,在到每一個位置的時候,弄一個區域性最大L值,代表以當前位置為結尾的最大子串,比如說我遍歷到第i個,那麼以第i個為結尾的最大子串就是我們要求的L。

比如這個題目:
-2 , 1, −3,4,−1,2,1,−5,4
位置0,L=x=-2,沒得選
位置1,要以x=1為結尾的最大的,那肯定不要帶上之前的-2,只要1就好L=x=1
位置2,因為本身x=-3,加上上一個位置L 是正數1,所以L=L+x=-3+1=-2。
下面以此類推得到:

對應的L應該是:
-2, 1, -2,4,3,5,6,-1,3

而全域性最大值G就是我們最終想要的結果,
肯定這個全域性最大值出自區域性最大值。
(因為全域性最大的那個子串的結尾肯定在數組裡,言外之意就是不管怎麼樣這個G都肯定出自L)
最後找到最大的那個L就是我們想要的G了。

class Solution(object):
    def maxSubArray(self, nums):
        l = g = -1000000000
        for n in nums:
            l = max(n,l+n)
            g = max(l,g)
        return g
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10