大學畢業已經兩年了,兩年的工作中發現自己曾經很差的計算機基礎部分還是沒有得到鍛鍊,就在中國大學MOOC上面參加了數據結構的課程。在博客中會把課後作業中的一些題目寫出來。
今天要說的題目是求一個數列的最大子列和,有一個N個整數的序列{A1,A2,A3,A4...AN},求函數f(x,y)=max{0, Ai+Ai+1+...Aj (1<=i<j<=N)}的最大值.
這題使用在線處理的算法,複雜度最低,爲o(n);
代碼如下:
#include <iostream>
using namespace std;
int a[100010];
int main()
{
int N;
while (cin >> N)
{
int thisSum = 0, maxSum = 0;
for (int i = 0; i < N; i++)
{
cin >> a[i];
thisSum += a[i];
if (thisSum > maxSum)
maxSum = thisSum;
else if (thisSum < 0)
thisSum = 0;
}
cout << maxSum << endl;
}
return 0;
}