0
点赞
收藏
分享

微信扫一扫

leetcode 热题 100_最大子数组和

北冥有一鲲 03-07 23:00 阅读 2

题解一:

        动态规划:这是一道经典的动态规划题。维护一个dp数组,dp[i]表示0~i组成的数组的最大子数组和。当数组长度为1时,最大和连续子数组是它本身,也就是dp[i]=nums[i]。当数组长度每增加1时,最大和连续子数组有两种可能,一是原先的最大和连续子数组加上增加的元素dp[i - 1] + nums[i],二是舍弃掉原先的最大连续子数组,以这个增加的元素作为起始建立的新的连续子数组nums[i],我们选择其中的较大值。

        动态规划只确保决策过程的最优化,而不保证结果的最优化,所以最后我们需要找出dp数组中的最大值作为结果。

class Solution {
    public int maxSubArray(int[] nums) {
        int[] dp = new int[nums.length];
        int result;

        dp[0] = nums[0];
        result = dp[0];

        for (int i = 1; i < nums.length; i++) {
            dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);
            if (dp[i] > result) result = dp[i];
        }

        return result;
    }
}
举报

相关推荐

0 条评论