1.最差的时间复杂度实现O(n^3)
public static int worst(int [] a){
int maxSum = 0;
for(int i = 0 ; i < a.length ; i++){
for(int j = i ; j < a.length ; j++){
int thissum = 0;
for(int k = i ; k <= j ; k++){
thissum += a[k];
}
if(thissum > maxSum){
maxSum = thissum;
}
}
}
return maxSum;
}
2.较差的时间复杂度O(n^2)
public static int bad(int[] a){
int maxSum = 0;
for(int i = 0 ; i < a.length ; i++){
int thissum = 0;
for(int j = i ; j < a.length ; j++){
thissum += a[j];
if(thissum > maxSum){
maxSum = thissum;
}
}
}
return maxSum;
}
3.较好的时间复杂度O(nlogn)
public static int notbad(int[] a,int left,int right){
if(left == right){
if(a[left] > 0){
return a[left];
}else{
return 0;
}
}
int center = (left + right)/2;
int maxLeftSum = notbad(a, left, center);
int maxRightSum = notbad(a,center+1,right);
int maxLeftBorderSum = 0,leftBorderSum = 0;
for(int i = center; i >= left; i--){
leftBorderSum += a[i] ;
if(leftBorderSum > maxLeftBorderSum){
maxLeftBorderSum = leftBorderSum;
}
}
int maxRightBorderSum = 0 , rightBorderSum = 0;
for(int i = center + 1; i <= right; i++){
rightBorderSum += a[i];
if(rightBorderSum > maxRightBorderSum){
maxRightBorderSum = rightBorderSum;
}
}
return max3(maxLeftSum ,maxRightSum , maxLeftBorderSum + maxRightBorderSum);
}
4.最好的时间复杂度O(n)
public static int best(int[] a){
int thissum = 0;
int maxsum = 0;
for(int i = 0 ; i < a.length ; i++){
thissum += a[i];
if(thissum < 0){
thissum = 0;
}
if(thissum > maxsum){
maxsum = thissum;
}
}
return maxsum;
}