Bootstrap

利用分治法求解最大子数组和

一个数组的最大子数组和可能存在于三种情况中:

1. 该数组的左子数组中

2.该数组的右子数组中

3.可能横跨左右子数组

所以,我们可以将问题分解成一个个的子问题,其中情况1和2可用递归求解,而情况3则需要计算

s1=max{ } (1 <= i <= n/2), s2=max{ } (n/2+1 <= j <=n),其中情况3中s1必然包含了,

s2中必然包含了,因为情况3跨越了左右子数组。s1 + s2为情况3的最大子数组。

代码(记录了最大数组和的范围):

/*
 * 利用分治法求最大子数组问题
 */
public class TestOne {

	public static int leftFlag;	//负责记录最大子数组和的开始下标
	public static in
;