LeetCode-53. 最大子序和

LeetCode-53. 最大子序和

給定一個整數數組 nums ,找到一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子數組 [4,-1,2,1] 的和最大,爲 6

思路

使用動態規劃求解。

首先將要求解的大集合分解成一個個小集合。如果我們知道每個以nums數組中當前元素結尾的子段的最大序列和,那麼再對所有以這些元素結尾的最大序列和取max即可。

那麼以nums【i】的結尾的最大子序列和怎麼求呢?需要注意的是數組中的元素是整數,有正有負。

當上一個狀態加上nums【i】的時候,不一定是以nums【i】的結尾的最大子序列和。這裏仍要nums【i】自身與取max。

狀態轉移方程:f[i] = max(f[i-1]+nums[i]),nums[i])。

class Solution {
    public int maxSubArray(int[] nums) {
        
        int res=Integer.MIN_VALUE;//記錄最大子序和
        int pre=0;//f[i-1]

        for(int i=0;i<nums.length;i++)
        {
            int cur=Math.max(pre+nums[i],nums[i]);
            res=Math.max(cur,res);
            pre=cur;
        }
        return res;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章