《子陣列最大和》

2022-08-03 20:54:14 字數 1319 閱讀 2223

(1)源**:

1 #include2

using

namespace

std;

3#define n 1000045

int max(int a, intb)6

12if (a < b&&a < 0)13

16if (a + b >= a&&a + b >=b)

1720

return

y;21}22

23int

select(int a, int l, int

r)24

30int maxr = a[m+1], maxl =a[m];

31int ml = a[m], mr = a[m + 1

];32

for (int i = m - 1; i >= l; i--)

3339}40

for (int i = m + 2; i <= r; i++)

4147}48

int e=select

(a, l, m);

49int z=select(a, m + 1

, r);

50int u=max(maxr, maxl);

51if (u >= e&&u >=z)

5255

if (e > z&&e >u)

5659

if (z > e&&z >u)

6063}64

intmain()

6576 cout <

77int p=select(a, 0, s-1

);78 cout << "

子陣列的最大和為

"<< p <

79return0;

80 }

(2)執行截圖:

(3)思路:

對於求子陣列最大值有時間複雜度的要求,不能用兩個for語句巢狀,我是用的遞迴演算法,利用類似折半查詢對元素進行相加並且進行比較,從而求出每個陣列的子陣列和為最大的值,再迴圈比較。

(4)缺陷記錄日誌:

用時:90分鐘,從3月23號11:00到12:30

20分鐘,從17:50到18:10對程式的不足進行改進

子陣列最大和

看到的乙個面試題。有很多人已經寫過,在此記下,明天給出拓展。題目 輸入乙個整型陣列,陣列裡有正數也有負數,陣列中連續的乙個或多個整數組成為子陣列,求有最大和的子陣列。要求 時間複雜度o n 如下 include using namespace std int main void int size s...

子陣列最大和

設sum i 為以第i個元素結尾且和最大的連續子陣列。假設對於元素i,所有以它前面的元素結尾的子陣列的長度都已經求得,那麼以第i個元素結尾且和最大的連續子陣列實際上,要麼是以第i 1個元素結尾且和最大的連續子陣列加上這個元素,要麼是只包含第i個元素,即sum i max sum i 1 a i a ...

子陣列最大和

思路 隨機產生5個數存在陣列a裡,定義陣列b來儲存子陣列的和,求和先求以第乙個隨機數開頭的所有情況,再求以第二個數開頭的所有情況,以此類推,例如 隨機數為1,2,3,4,5 先求 1,2,3,4,5 1,2,3,4 1,2,3 1,2這幾個子陣列的和,然後繼續求 2,3,4,5 2,3,4 2,3以...