文章

11

粉丝

406

获赞

14

访问

88.1k

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. using namespace std;
  5. void merge(int *array,int l,int mi,int r){
  6. int *tmp=new int[mi-l];
  7. for(int i=0;i<mi-l;i++){
  8. tmp[i]=array[l+i];
  9. }
  10. int i=0,j=mi,k=l;
  11. while((l+i<mi)&&(j<r)){
  12. array[k++]=(array[j]<tmp[i])?array[j++]:tmp[i++];
  13. }
  14. while(l+i<mi){
  15. array[k++]=tmp[i++];
  16. }
  17. delete []tmp;
  18. }
  19. void mergesort(int *array,int l,int r){
  20. if(r-l<2)return;
  21. int mi=(l+r)>>1;
  22. mergesort(array,l,mi);
  23. mergesort(array,mi,r);
  24. merge(array,l,mi,r);
  25. }
  26. int deduplicate(int* array,bool* flag,int l, int r){
  27. if(r-l<2)return(r-l==1)?1:0;
  28. int last_ele=array[l],rear=l;
  29. for(int i=l+1;i<r;i++){
  30. if(array[i]!=last_ele){
  31. rear++;
  32. last_ele=array[i];
  33. if(rear<i)array[rear]=array[i];
  34. }
  35. else{
  36. flag[rear]= true;
  37. ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发