[leetcode]Maximum Subarray

很基础的一维动态规划,复杂度O(n)。

public class Solution {
    public int maxSubArray(int[] A) {
        int len = A.length;
        if (len == 0) return 0;
        int[] max = new int[len];
        max[0] = A[0];
        int ans = max[0];
        for (int i = 1; i < len; i++)
        {
             if (max[i-1] <= 0)
             {
                 max[i] = A[i];
             }
             else {
                 max[i] = max[i-1] + A[i];
             }
             if (max[i] > ans) ans = max[i];
        }
        return ans;
    }
}

但又要求尝试一下n*log(n)的分治法。这个方法记得《编程珠玑》里有,想去找一下书,却忽然发现枕边的书又找不到了,神奇。其实想想就知道了,n*log(n)就是log(n)的高度*每次n的复杂度么,那么可以分两边,求出左半最大值和右半最大值之后,再计算以左半右端点结尾的最大和和右半段左端点为起点最大和,然后拼起来,再三者取最大值。

参见:http://www.cnblogs.com/cheapcrook/archive/2013/01/27/2878580.html

posted @ 2013-08-30 00:31  阿牧遥  阅读(220)  评论(0)    收藏  举报