1. 程式人生 > >返回一個整數數組最大子數的和

返回一個整數數組最大子數的和

都是 出現 初始 時間復雜度 names length bubuko sof 最大子數組

實驗人員:畢文強 常嘯帆

實驗要求:必須能處理1000個元素;

每個元素是int32類型的,出現子數組之和大於顯示最大範圍會出現什麽情況;

輸入一個整形數組,有正也有負;

數組中連續的一個或多個整數組成一個數組,每個子數組都必須有一個和;

求所有子數組和的最大值,要求時間復雜度為o(n)。

實驗過程:在本次實驗中,我們兩人通過所學的c++知識來編寫程序,在過程中我們發現了一下問題並逐步解決
在編寫的過程中,首先會發現數組中少了一個元素,那是因為在循環時length寫成了length-1,
而且max沒有初始化,如果初始化為0,那麽都是負數時結果為0,這個結果是錯誤的,原因在於負數都比0小,
解決方法就是max初始化為數組第一個元素的值。並且在測試時,針對數組為空拋出異常,進行處理。

#include<iostream>
using namespace std;
int max(int a,int b)
{
if(a>b)
{
return a;
}
else
{
return b;
}
}
int maxsum(int a[], int n)
{ int i;
int maxsofar = 0; //maxsofar記錄到目前為止的的最大值
int maxendinghere = 0; //maxendinghere記錄從當前位置開始往前幾個連續的數的和的最大值
for (i = 0; i < n; i++)
{
maxendinghere = max(maxendinghere + a[i], 0);
maxsofar = max(maxsofar, maxendinghere);
}
return maxsofar;
}
int main()
{
int n, i=0;
cout<<"請輸入個數:";
cin>>n;
cout<<"請輸入數組:";
int a[1000]={0};
for(i=0;i<n;i++)
{
cin>>a[i];
}
int max=maxsum(a, n);
cout << "最大子數組的和為:" << max << endl;
return 0;
} 技術分享圖片
技術分享圖片

返回一個整數數組最大子數的和