2017CVTE-C++筆試題-求最大和子序列

題目

輸入一個整型數(shù)組,數(shù)組里有正數(shù)也有負數(shù)。 數(shù)組中連續(xù)的一個或多個整數(shù)組成一個子數(shù)組,每個子數(shù)組都有一個和。 求所有子數(shù)組的和的最大值。要求時間復雜度為O(n)。 例如輸入的數(shù)組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數(shù)組為3, 10, -4, 7, 2,

代碼

#include<iostream>
using namespace std;

#define NUM 8

int main()
{
    int ary[NUM] = { 1, -2, 3, 10, -4, 7, 2, -5 };
    
    int max = 0;//保存最大和
    int curSum = 0;//保存當前和
    int curStart = 0;//當前和的起始位置
    int start = 0;//最大和的起始位置
    int end = 0;//最大和的終止位置
    for (int i = 0; i<NUM; i++)
    {
        if (i == 0)
        {
            curSum = max = ary[i];
            continue;
        }

        if (curSum<0)
        {
            curSum = 0;//與負數(shù)相加,和會減小,所以拋棄以前的和
            curStart = i;
        }
        //最大值已經被保存下來,所以請大膽的繼續(xù)往前加
        curSum += ary[i];
        //當前和被保存為最大值,記錄下它的起始位置和結束位置
        if (curSum>max)
        {
            max = curSum;
            start = curStart;
            end = i;
        }
    }

    cout << "和最大的子數(shù)組為:" << endl;
    for (int i = start; i <= end; i++)
    {
        cout << ary[i] << " ";
    }
    cout << "= " << max;
    cin.get();
    return 0;
}

結果

結果.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容