連續子數組的最大和

題目:

一個數組有 N 個元素,求連續子數組的最大和。 例如:[-1,2,1],和最大的連續子數組爲[2,1],其和爲 3

解題思路:

方案一:可以使用暴力求解的方式,直接用兩層for循環來解決問題,是一個O(n^2)的算法

方案二:從頭開始遍歷數組,每遍歷一個元素sum+=array[i],若此時sum<array[i],就說明從array[i]開始的子數組的和大於前面的子數組的和,所以令sum=array[i].   還不能遺漏最大和的判斷和更新。

代碼實現:

int FindGreatestSumOfSubArray(vector<int> array) {
        if(array.empty())
            return 0;
        int cursum = array[0];
        int maxsum = cursum;
        int size = array.size();
        int i = 1;
        for(; i < size; ++i)
        {
            cursum += array[i];
            if(cursum < array[i])
                cursum = array[i];
            if(cursum > maxsum)
                maxsum = cursum;
        }
        return maxsum;
    }

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