1. 程式人生 > 其它 >10.最大子陣列和

10.最大子陣列和

/*給你一個整數陣列 nums ,請你找出一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。

子陣列 是陣列中的一個連續部分。

思路
這道題用動態規劃的思路並不難解決,比較難的是後文提出的用分治法求解,但由於其不是最優解法,所以先不列出來
動態規劃的是首先對陣列進行遍歷,當前最大連續子序列和為 sum,結果為 ans
如果 sum > 0,則說明 sum 對結果有增益效果,則 sum 保留並加上當前遍歷數字
如果 sum <= 0,則說明 sum 對結果無增益效果,需要捨棄,則 sum 直接更新為當前遍歷數字
每次比較 sum 和 ans的大小,將最大值置為ans,遍歷結束返回結果
時間複雜度:O(n)O(n)*/


class Solution {
    public int maxSubArray(int[] nums) {
        int ans = nums[0];
        int sum = 0;
        for(int num: nums) {
            if(sum > 0) {
                sum += num;
            } else {
                sum = num;
            }
            ans = Math.max(ans, sum);
        }
        return ans;
    }
}