求最大子数组(利用动态规划)

来源:互联网 发布:淘宝大促时间表2016 编辑:程序博客网 时间:2024/06/05 09:13

           利用动态规划解决求最大子数组(最大子数组,即连续的数组中的某x个数相加和最大,x最小为1)。

       算法思想:求整个最大子数组,可以分解为求前n - 1个数的最大子数组和最后一个数。这两个部分比较大小求出最大的。如果前者大,则在同理细化。

       算法实现 

      

        class Solution {            public int maxSubArray(int[] nums) {                int    n = nums.length;                int[] dp = new int[n];                dp[n - 1] = nums[n - 1];                int max = dp[n - 1];                        // 分而治之思想                for (int i = n - 2; i >= 0; i--) {                    dp[i] = nums[i] + (dp[i + 1] > 0 ? dp[i +1] : 0);                    max = Math.max(max, dp[i]);                }                        return max;                    }        }