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<[email protected], [email protected]>

'''

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)