求最大子串行的和O(n)演算法複雜度

2021-08-20 06:19:22 字數 625 閱讀 5465

題目:

輸入一組整數,求出這組數字子串行和中的最大值,只要求出最大子串行的和,不必求出最大值對應的序列。

最大子串行和:整數序列a1, a2,... an (可能有負數),求a1~an的乙個子串行ai~aj,使得ai到aj的和最大。

例如:序列:-2, 11, -4, 13, -5, 2, -5, -3, 12, -9,則最大子串行和為21。

序列:0, -3, 6, 8, -20, 21, 8, -9, 10, -1, 3, 6, 5,則最大子串行和為43。

演算法思路為:求最大子串行和時,序列的起點不能為負數。因為當a[i]為負數時,那麼總有為正數的a[i+1]在它的前面做起點更加合適。所以當和為負數時我們將其賦值為0,將它拋棄掉(此時和也可以認為是序列中的乙個數,但它是負數,不適合做起點。我們將其拋棄)從下乙個正數開始計算。全負數是一種特殊情況 ,此時我們選擇求絕對值最小的那乙個。

**如下:

#include#includeusing namespace std;

int maxsum(int a,int n)

return maxsum;

} int main()

cout

}

最大子串行和O(n)階複雜度演算法

問題描述給定整數序列a1,a2,a3,a4,a5,求 ai a i 1 aj 的最大值 int mostson int arryin,int len else return most 演算法解釋 確定子串行最大值得關鍵點在於確定序列開始位置和結束位置。開始位置難以確定,確定開始位置之後每加乙個數字的...

時間複雜度和最大子串行問題

執行時間計算 法則1 for迴圈 乙個for迴圈的執行時間最多是該for迴圈內部那些語句 包括測試 的執行時間乘以迭代的次數。法則2 巢狀的for迴圈 從裡向外分析這些迴圈,在一組巢狀迴圈內部的一條語句的執行時間為該語句的執行時間乘以該組所有的for迴圈的大小的乘積。法則3 順序語句 將各個語句的執...

最大子列和(演算法複雜度優化)

include include include define maxk 1e7 clock t start,stop double duration 一種複雜度為o n 3 的暴力解法 int maxsubseqsum1 int a,int n return maxsum 複雜度為o n 2 的演算...