最大子串行求和問題(1) 解法之一分治法

2021-06-06 08:40:56 字數 1014 閱讀 1640

(一)問題提出

求序列和的最大值

* 求最大序列和

*/public class cmaxsumutils else

} //『分』

int center = (left + right) / 2;

//遞迴求解

int maxleftsum = maxsum(a, left, center);

int maxrightsum = maxsum(a, center + 1, right);

/*** 例:

* 當子問題為[-1 2],求得以下

* maxleft=-1,maxright=2,max橫跨左右=-1 + 2

* 當取 3者最大解

*/int maxleftbordersum = 0;

int leftbordersum = 0;

for(int i = center; i >= left; i--)

}int maxrightbordersum = 0;

int rightbordersum = 0;

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

}return max(maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum ); }

private static int max(int a1, int a2, int a3)

if(a2 > max)

if(a3 > max)

return max; }

public static void main(string args) ;

system.out.println(maxsum(a, 0, a.length - 1));

}}

最大子串行求和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。輸入第1行給出正整數k 第2行給出k個整數,其間以空格分隔。在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。6 2 11 4 1...

最大子串行求和問題

給定整數a1 role presentation a1a 1,a2 role presentation a2a 2,an role presentation ana n 可能有負數 求 k ija k role presentation jk iak k i jak的最大值 為方便起見,如果所有整數...

最大子串行求和 絕妙的演算法 最大子串行和問題

問題的引入 給定 可能有負數 整數序列a1,a2,a3.an,求這個序列中子序列和的最大值。為方便起見,如果所有整數均為負數,則最大子串行和為0 例如 輸入整數序列 2,11,8,4,1,16,5,0,則輸出答案為35,即從a2 a6。這個問題之所以有吸引力,主要是因為存在求解它的很多演算法,而這些...