0
点赞
收藏
分享

微信扫一扫

最大子序和(动态规划)

舍予兄 2021-09-24 阅读 57

  • base case:思考问题规模最小时,是什么情况(临界值)。
  • update function:自下而上思考这个问题,得到公式。
  • gola:强调输出的是什么,很多时候并不是输出最后一个结果值。

上面的关键字是连续,即无论什么情况之前结果与nums[i]相加。我们新建一个动态规划数组(dp)来保存之前结果。

  • dp[i-1]>0情况下,dp[i]=dp[i-1]+nums[i];
  • dp[i-1]<0情况下,dp[i]=0+nums[i];

dp的初始长度为nums.length(),dp[0]=nums[0];使用一个临时的整型来保存最大的子序和。

public static int maxSubArray(int[] nums) {  
    if (nums == null || nums.length == 0) {  
        return 0;  
    }  
    //dp数组  
    int[] dp = new int[nums.length];  
    dp[0] = nums[0];  
    int max = nums[0];  
    for (int i = 1; i < dp.length; i++) {  
        dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);  
        max = Math.max(max, dp[i]);  
    }  
    return max;  
}  
举报

相关推荐

0 条评论