文章

11

粉丝

406

获赞

3

访问

84.7k

头像
AC的代码,时间复杂度为nlogn
P1024 贵州大学机试题
发布于2020年10月11日 10:38
阅读数 8.6k

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

void merge(int *array,int l,int mi,int r){
    int *tmp=new int[mi-l];
    for(int i=0;i<mi-l;i++){
        tmp[i]=array[l+i];
    }
    int i=0,j=mi,k=l;
    while((l+i<mi)&&(j<r)){
        array[k++]=(array[j]<tmp[i])?array[j++]:tmp[i++];
    }
    while(l+i<mi){
        array[k++]=tmp[i++];
    }

    delete []tmp;
}

void mergesort(int *array,int l,int r){
    if(r-l<2)return;
    int mi=(l+r)>>1;
    mergesort(array,l,mi);
    mergesort(array,mi,r);
    merge(array,l,mi,r);
}

int deduplicate(int* array,bool* flag,int l, int r){
    if(r-l<2)return(r-l==1)?1:0;
    int last_ele=array[l],rear=l;
    for(int i=l+1;i<r;i++){
        if(array[i]!=last_ele){
            rear++;
            last_ele=array[i];
            if(rear<i)array[rear]=array[i];
        }
        else{
            flag[rear]= true;
    ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发