首页 > 代码库 > LEETCODE —— Maximum Subarray [一维DP]

LEETCODE —— Maximum Subarray [一维DP]

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.

 

More practice:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

 

--

 

一维DP, O(n).
假设A(0, i)区间存在k,使得[k, i]区间是以i结尾区间的最大值, 定义为Max[i], 在这里,当求取Max[i+1]时,

if (Max[i] + A[i+1] >0)
  Max[i+1] = Max[i] + A[i+1]

if(Max[i]+A[i+1] <0) #也就是要舍弃

  Max[i+1] = 0

 

‘‘‘Created on Nov 13, 2014@author: ScottGu<gu.kai.66@gmail.com, 150316990@qq.com>‘‘‘class Solution:    # @param A, a list of integers    # @return an integer    def maxSubArray(self, A):        sum=0        max=-655356        for x in A:            sum+=x            if(sum>max):                max=sum            if(sum<0):                sum=0        return max

 

LEETCODE —— Maximum Subarray [一维DP]