[LeetCode]--Maximum Subarray

題目

        Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

       For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
       the contiguous subarray [4,-1,2,1] has the largest sum = 6.

       中文題意:在給定數組中找出具有最大和的連續子序列,並返回該最大和。

       例:給定數組[-2, 1, -3, 4, -1, 2, 1, -5, 4],符合題意的子序列爲[4, -1, 2, 1],最大和爲6

分析

       對於這道題目,我們最先想到的是利用嵌套循環求每一個子序列的和,並且與當前最大和作比較,得到結果。但是這樣做的時間複雜度是很高的,算法的代價也很高。
       我們不妨考慮這樣一種算法:從數組的首部開始,將元素依序逐個相加,並與當前最大和比較,如果當前依序和大於當前最大和,則將最大和設置爲該依序和。與此同時,將依序和與0相比,由於負數對於連續子序列取最大和這一要求起到反作用,也即負數是不利的加數,因此當依序和小於0時,我們即丟棄該和,將sum值重置爲0。這在整個序列中,相當於將子序列的首部向後移的操作。

解答

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int length=nums.size();
        if(length==0)
            return 0;
        int result=nums[0];
        int sum=0;
        for(int i=0;i<length;i++){
            sum=sum+nums[i];
            if(sum>result){
                result=sum;
            }
            if(sum<=0){
                sum=0;
            }
        }
        return result;
    }
};
        時間複雜度爲O(n),其中n爲數組長度。

發佈了29 篇原創文章 · 獲贊 12 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章