Maximum Subarray

Dynamic Programming

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.

C++实现代码:

#include<iostream>

#include<climits>

using namespace std;



class Solution {

public:

    int maxSubArray(int A[], int n) {

        if(n==0)

            return 0;

        int maxSum=0;

        int sum=0;

        int i;

        int max=INT_MIN;

        for(i=0;i<n;i++)

        {

            if(A[i]>=0)

               break;

            if(A[i]>max)

                max=A[i];

        }

        if(i>=n)

            return max;

        for(i=0;i<n;i++)

        {

            sum+=A[i];

            if(maxSum<sum)

            {

                maxSum=sum;

            }

            if(sum<0)

                sum=0;

        }

        return maxSum;

    }

};



int main()

{

    Solution s;

    int A[10]={-2,-3,-8,0};

    cout<<s.maxSubArray(A,10)<<endl;

}

注意:其中至少包含一个数,所以当全是负数时,只能返回最大的负数。。

你可能感兴趣的:(array)