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

能返回一個整數數組中最大子數組的和的小程序

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”。

運行截圖:

技術分享圖片

技術分享圖片

技術分享圖片

能返回一個整數數組中最大子數組的和的小程序