【LeetCode題解】53. 最大子序和

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

示例:

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

如果你已經實現複雜度爲 O(n) 的解法,嘗試使用更爲精妙的分治法求解。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-subarray
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

class Solution {
    public int maxSubArray(int[] nums) {
        /**
        讀入i位置的時候,在i-1的最大和爲 [begin,.....i-1]的基礎上會有兩種可能:
        第一種是 最大和不變還是 [begin......,i-1]
        第二種是 最大和改變爲[begin....i]
        */
        if(nums.length == 0){
            return 0;
        }
        int cur_sum = 0,ret = nums[cur_sum];
        for(int i=0 ; i<nums.length ; i++){
            cur_sum += nums[i];
            if(cur_sum>ret){//第二種
                ret = cur_sum;
            }
            if(cur_sum < 0){//第一種
                cur_sum = 0;
            }
        }
        return ret;
    }
}

 

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