【解题思路】
当数组的和为负时候,重新创建子数组
package offerExam;
public class SumOfMaxSubMatrix {
public static void main(String[] args){
int[] array={1,-2,3,10,-4,7,2,-5};
int[] subMatrixIndx={0,0};
//用于存储最大连续子数组的首尾索引值
int result=SumOfMaxSubMatrix(array,subMatrixIndx);
System.out.println(result);
System.out.println("The max sunMatrix is from index "+subMatrixIndx[0]+" to index "+subMatrixIndx[1]);
}
static boolean inputInvalid=false;
private static int SumOfMaxSubMatrix(int[] array, int[] subMatrixIndx) {
if(array==null||subMatrixIndx==null||array.length==0){
inputInvalid=true;
return 0;
}
// TODO Auto-generated method stub
int maxSum=0x80000000;
int curSum=0;
int cur_start=0;
int cur_end=0;
if(array==null||subMatrixIndx==null||array.length==0)
return 0;
for(int i=0;i<array.length;i++){
if(curSum<=0){
curSum=array[i];
cur_start=i;
}
else{
cur_end++;
curSum=curSum+array[i];
}
if(curSum>maxSum)
{
maxSum=curSum;
cur_end=i;
}
}
if(cur_end<=cur_start)
cur_start=cur_end;
subMatrixIndx[0]=cur_start;
subMatrixIndx[1]=cur_end;
return maxSum;
}
}