練習題 連續最大子陣列問題(最簡單的解釋)

2021-08-20 07:45:59 字數 745 閱讀 2629

問題描述:

輸入乙個整形陣列,陣列裡有正數也有負數。

陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。

求所有子陣列的和的最大值。要求時間複雜度為o(n)。

例:輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,

和最大的子陣列為3, 10, -4, 7, 2,

因此輸出為該子陣列的和18。

int main()

//主要**

int sum=a[0];

int max=a[0];

for(int i=0;i//如果此時和已小於0,就開始重新計算

if(sum<0)

sum=0;

sum=sum+a[i];

//更新最大值

if(sum>max)

max=sum;

}cout

}

我們的問題是要選出「和最大」的連續子陣列:

具體:

當sum的和為-1時,這時就可以對進行拋棄,因為無論後面與那些數進行組合,有這兩個數必然會比沒有這兩個數和小

總結:設sum為包含第i個元素的連續子陣列的和,max 當前記錄的最大子陣列的和。

對第i+1個元素有兩種選擇:

做為新子陣列的第乙個元素

放入前面找到的子陣列

程式設計開發練習題 最大子段和

問題描述 程式設計開發練習題 最大子段和。給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,依此定義,所求的最優值為 max,1 i j n。自上而下的分治演算法 將序列a 1 n 分解為長...

程式設計練習題 求解全排列求最大子陣列之和(Java)

給定乙個整數陣列,找到乙個具有最大和的子陣列,返回其最大和。樣例給出陣列 2,2,3,4,1,2,1,5,3 符合要求的子陣列為 4,1,2,1 其最大和為6 1 找出子陣列的最左端點 for i 1 to n 2 找出子陣列的最右端點 for j i to n 3 求和,找出最大值 sum a i...

最簡單的「最大子段和」問題

最簡單的 最大子段和 問題 description 給定n個整數 可能為負數 a1,a2,an。求ai,ai 1,aj 其中1 i j n的子段和的最大值。當所有整數均為負數時我們定義其最大子段和為0。例如 當 a1,a2,a3,a4,a5,a6 2,11,4,13,5,2 時,最大子段和為a2 a...