【ATT】Maximum Subarray

Q: 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.

找到连续的子数组,使得和最大。

A: 典型的动态规划。

f(i):以i结尾的子数组最大和.  定义成1~i之间最大和,是不对的,因为题目要求连续的最大子数组。

f(i) = f(i-1) + arr[i];   f(i-1)>0

  = arr[i];     f(i-1)<=0

max = max{f(i)}

    int maxSubArray(int A[], int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(n==0)
            return INT_MIN;
        int sum = A[0];
        int max = sum;
        for(int i=1;i<n;i++)
        {
            if(sum<=0)
                sum = A[i];
            else
                sum = sum + A[i];
            
            if(sum>max)
                max = sum;
        }
        
        return max;
        
    }

  

posted @ 2013-06-12 15:34  summer_zhou  阅读(121)  评论(0)    收藏  举报