/**
* 获得连续子数组的最大和
*
* @author dfeng
*
*/
private static long getMax(long a, long b) {
return a > b ? a : b;
}
/**
* 获得连续子数组的最大和
*
* @param array
* @return 最大和,此处用了Long型是为了表示当参数为null或空时,可以返回null,返回其它任何数字都可能引起歧义。
*/
public static Long getMax(int[] array) {
if (array == null || array.length <= 0) {
return null;
}
long maxSum = array[0]; // 所有子数组中最大的和
long righteEdge = array[0]; // 右侧子数组的最大和
for (int i = 1; i < array.length; i++) {
// 当右侧子数组的最大和为负数时,对于新数组,右侧子数组的最大和为新增加的数。
if (righteEdge < 0) {
righteEdge = array[i];
} else { // 为正数时,对于新数组,右侧子数组的最大和为新增加的数 + 原来的最大和。
righteEdge += array[i];
}
// 所有子数组中最大的和
maxSum = getMax(righteEdge, maxSum);
}
return maxSum;
}
public static void main(String[] args) {
int[] array = { -111, -2, -3, -10, -4, -7, -2, -5 };
System.out.println("Max sum: " + getMax(array));
}