您的位置:首页 > 理论基础 > 数据结构算法

最大子序列和的四种不同复杂度实现

2017-09-15 15:59 357 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构