1. 程式人生 > >Leetcode(53) 最大子序和

Leetcode(53) 最大子序和

題目描述
給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。
示例:
輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

解題思路
該題是讓求解最大和的連續子陣列,而且是個陣列的話,一般就肯定是有迴圈的,本題提示說最好是O(n)的複雜度,所以應該只有一層迴圈就可以搞定。
最大和的連續子陣列,可以確定的一點就是,這個子陣列肯定是以正數開頭,正數結尾的,所以只需要設定一個判斷,判斷每個正數開頭,正數結尾的陣列是否比前一個大就ok了啊
程式碼如下

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int return_max=nums[0];
        int num=0;
        for(int i=0;i<nums.size();i++)
        {
            if(num>0)
                num+=nums[i];
            else
                num=nums[i];
            return_max=num>return_max?num:return_max;
        }
        return return_max;
    }
};