[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

你可能感兴趣的:(LeetCode)