最大欄位和問題

2021-08-29 02:40:46 字數 1181 閱讀 1977

最大欄位和的思想是將字段分為兩部分,即將陣列平均分為兩部分,那麼最大欄位和的問題分為三種:

(1)最大欄位和在陣列的第一部分

(2)最大欄位和在陣列的第二部分

(3)最大欄位和在陣列的「中間」部分,即以陣列的中間數為起點向陣列的兩端擴充套件得到的最大子段和

這個時候就要用到遞迴的思想,最開始就分為這三種情況,當求第一種情況時,就又要將「一半」陣列分為三種情況討論,如此遞迴。針對第三種情況,我採用的思想是從陣列中間那個書開始向兩邊擴充套件分別求和,並且記錄在每個數所求的和(左半部分從中間那個數開始向前算,右半部分從中間那個數的後面那個數開始算),然後求出左半部分的最大值和右半部分的最大值並且記錄下兩邊取得最大和的元素的位置,然後在整合兩邊的最大欄位和,最後再將三種情況下的值進行比較。

import org.w3c.dom.css.elementcssinlinestyle;

//最大欄位和問題的思路為:將最大字段分為兩半,則有三種情況,一種為第一部分的子段最大,第二種為第二部分的最大,

//第三種是前後兩端的中間部分最大,這種情況下則從子段的中間部分分別往前後兩部分求得其最大值再相加

//最後比較三種情況的最大值,即求得最大字段,並輸出。

public class maxadd ; //定義待求的陣列

public int add (int s)

else if(s.length==2)

else

}else

else}}

//當陣列元素大於等於三個的時候

else

for(int j=m+1;jmax1)

}for(int j=m;jmax2)

}int g=new int [y-x+1];

for(int i=0;ir)

else

}else

else

} }

} public static void main(string args)

; maxadd padd=new maxadd();

int b=padd.add(a);

int sum=0;

system.out.print("最大欄位和的字段為:");

for(int i=0;isystem.out.println("\n"+"和為:"+sum);

}}

最大欄位和問題

輸入乙個整型陣列,陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。示例1 輸入 nums 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。此題很顯然可以用多層for迴圈解決,時間複雜度為o n 2 dp初始化 dp 0 nums ...

最大欄位和

include include include include include using namespace std 最大欄位和問題描述 給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,...

最大欄位和

1049 最大子段和 難度 基礎題 n個整數組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的連續子段和的最大值。當所給的整數均為負數時和為0。例如 2,11,4,13,5,2,和最大的子段為 11,4,13。和為20。input 第1行 整數序列的長度n 2 n 5...