陣列的連續最大子段和

2021-07-30 15:17:25 字數 1362 閱讀 4996

最大子段和問題描述

給定由 n 個整數(可能為負整數)組成的序列a1,a2,a3...an,求該數列中連續子段和最大!

例如:當(a1,a2,a3,a4,a5)=(-2,11,-4,13,-5,-2)時,最大欄位和為 20 (11 + (-4) + 13);

以下例子都是以int data[6] = ;    int n = 6;

演算法一:對所有滿足0<=i<=j<=n的(i,j)整數對進行迭代,對每個整數對,程式都要計算array[i...j]的總和,並檢驗該總和是否大於迄今為止的最大總和

這段**簡潔明瞭,便於理解,但是程式執行的速度很慢,時間複雜度為o(n^3)

int solvemaxcssum1()else 

}else

} int rightmax = 0;

int rightmaxtemp = 0;

for(int j = center + 1; j <= right; j++)

} maxsum = leftmax + rightmax;//(左邊最大值和右邊最大值之和)計算第 3 種情況的最大子段和

//比較(左邊最大值)和(右邊最大值)以及(兩邊最大值之和)進行比較,從中選擇乙個最大值返回

if(maxsum < leftmaxsum)

if(maxsum < rightmaxsum)

} return maxsum;

}

演算法四:使用動態規劃來求解 ,由data陣列

我們易知,當maxsumtemp > 0時,maxsumtemp = data[i] + maxsumtemp (越加越大),

否則maxsumtemp

= data[i](不然越加越小)

這段**便於理解,但是程式相對於演算法三執行的速度最快,時間複雜度為o(n)

int solvemaxcssum4()else

if(maxsumtemp > maxsum)

} return maxsum;

}

陣列的連續最大子段和

轉至 anker s blog 問題描述 輸入是乙個大小為n的整型陣列,要求輸出陣列的任何連續子陣列中的最大值。例如 輸入的陣列為array 10 輸出最大連續子陣列和為array 2.6 187 演算法1 對所有滿足0 i j n的 i,j 整數對進行迭代,對每個整數對,程式都要計算array i...

陣列的連續最大子段和

問題描述 輸入是乙個大小為n的整型陣列,要求輸出陣列的任何連續子陣列中的最大值。例如 輸入的陣列為array 10 輸出最大連續子陣列和為array 2.6 187 演算法1 對所有滿足0 i j n的 i,j 整數對進行迭代,對每個整數對,程式都要計算array i.j 的總和,並檢驗該總和是否大...

陣列的連續最大子段和

問題描述 輸入是乙個大小為n的整型陣列,要求輸出陣列的任何連續子陣列中的最大值。例如 輸入的陣列為array 10 輸出最大連續子陣列和為array 2.6 187 演算法1 對所有滿足0 i j n的 i,j 整數對進行迭代,對每個整數對,程式都要計算array i.j 的總和,並檢驗該總和是否大...