最大最小表示法模板

/*
我对这个算法的理解是意淫出来的,没有详细严谨的证明
,所以只把重要的地方注释了一下
*/
int getMin(){
    int i=0,j=1,k=0;
    while(i<len&&j<len&&k<len){
        int t=T[(i+k)%len]-T[(j+k)%len];
        if(t==0) k++;
        else{
            if(t>0) i+=k+1;//从T[i->i+k+1]开头的不会比之前的小,之前所比较的都是相等的;
            else j+=k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}
int getMax(){
    int i=0,j=1,k=0;
    while(i<len&&j<len&&k<len){
        int t=T[(i+k)%len]-T[(j+k)%len];
        if(t==0) k++;
        else{
            if(t>0) j+=k+1;
            else i+=k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}


int getMin(){
    int i=0,j=1,k=0;
    while(i<len&&j<len&&k<len){
        int t=T[(i+k)%len]-T[(j+k)%len];
        if(t==0) k++;
        else{
            if(t>0) i+=k+1;
            else j+=k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}
int getMax(){
    int i=0,j=1,k=0;
    while(i<len&&j<len&&k<len){
        int t=T[(i+k)%len]-T[(j+k)%len];
        if(t==0) k++;
        else{
            if(t>0) j+=k+1;
            else i+=k+1;
            if(i==j) j++;
            k=0;
        }
    }
    return min(i,j);
}

  

原文地址:https://www.cnblogs.com/imzscilovecode/p/8119183.html