leetcode 53 最大子段和(easy java 動態規劃)

核心:

跟以前的dp不太一樣,這個需要換個思路

假設dp[i]表示以i爲結尾的最長子段的和  它和dp[i-1]的關係就是

dp[i]=max(dp[i-1]+nums[i],nums[i])

意思就是  包括前面i-1計算出來的子段和, 不包括前面的子段和,也就是隻有nums[i]自己一個數 

class Solution {
    public int maxSubArray(int[] nums) {
        if(nums.length==0){
            return 0;
        }
        if(nums.length==1){
            return nums[0];
        }
        int[] dp =new int[nums.length];
        dp[0]=nums[0];
        int max_result=dp[0];//這點還挺重要的
        for(int i=1;i<nums.length;i++){
            dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);
            if(dp[i]>max_result){
                max_result=dp[i];
            }
        }
        return max_result;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章