[leetcode]53. Maximum Subarray 最大連續子串python實現【medium】
阿新 • • 發佈:2019-02-12
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