能返回一個整數數組中最大子數組的和的小程序
阿新 • • 發佈:2018-10-14
length class 思路 std sum 最大 分享圖片 i++ c語言基礎
要求:
1.要求程序必須能處理1000個元素;
2.每個元素是int32類型的,出現子數組之和大於整型表示的最大範圍會出現什麽情況;
3.輸入一個整形數組,數組裏有正數也有負數;
4.數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和;
5.求所有子數組的和的最大值。要求時間復雜度為O(n)。
思路:
就是用一個一維數組記錄以每個元素為結尾的子序列的最大和,然後再掃描一遍這個數組,以獲取最大值。
源代碼:
#include<iostream> #define N 1000 using namespace std; int Compare(int Group[], int Length) {int MaxSum[N][2]; MaxSum[0][0] = MaxSum[0][1] = Group[0]; for (int i = 1; i < Length; i++) { MaxSum[i][0] = __max(MaxSum[i - 1][0], MaxSum[i - 1][1]); MaxSum[i][1] = __max(MaxSum[i - 1][1] + Group[i], Group[i]); } return __max(MaxSum[Length - 1][0], MaxSum[Length - 1][1]); } int main() { int Number[N]; int length; cout << "請輸入一個整型數組:" << endl; cin >> Number[0]; length = 1; while (getchar() != ‘\n‘) { cin >> Number[length++]; } cout << "該數組中的最大的子數組和為:"; cout << Compare(Number, length) << endl; system("pause"); return 0; }
總結:
通過大一學習的C語言基礎我們學習了將子函數結構和在程序裏面定義動態數組,於是在該程序中就使用了子函數和指針,通過define來定義數組的長度。剛開始程序做出來時無法運行,輸入完數組後回車就會退出程序,最後通過再“return 0;”前加入“system("pause")”程序才得以良好運行。當我們輸入數組裏的值過大後,結果總是為“-858993460”。
運行截圖:
能返回一個整數數組中最大子數組的和的小程序