转自几个面试经典算法题Java解答(http://www.cnblogs.com/sunniest/p/4596182.html)题目五
//求数组中一个或连续多个元素组成子数组中,和最大的子数组。时间复杂度O(n)
public class SubArraySumMax {
public int findSubMax(int[] array){
int curSum = 0;
int maxSum = -999999999;
int start = 0;
int end = 0;
for(int i = 0 ; i < array.length ; i++){
if(curSum <= 0){
curSum = array[i];
start = i;
}else{
curSum += array[i];
}
if(curSum > maxSum){
maxSum = curSum;
end = i;
}
}
for(int i = start ; i <= end ; i++){
System.out.print(array[i] + " ");
}
System.out.println();
return maxSum;
}
public static void main(String[] args) {
SubArraySumMax sa = new SubArraySumMax();
int[] array = {-2 , 3 , 1};
System.out.println(sa.findSubMax(array));
}
}