AcWing 113. 特殊排序

Posted acmloser

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 113. 特殊排序相关的知识,希望对你有一定的参考价值。

原题链接
考察:二分
错误思路:
  分治.将第一个数和其他所有数比较完后,确定第一个数的位置.然后递归左右半边.
  只过了10个数据,剩下的超过10000次.
思路:
  vector装已经排好的序列,对于新的枚举数,二分求适合它的位置.

Code

// Forward declaration of compare API.
// bool compare(int a, int b);
// return bool means whether a is less than b.

class Solution {
public:
    vector<int> v;
    vector<int> specialSort(int N) {
       v.push_back(1);
       for(int i=2;i<=N;i++)
       {
           int l = 0,r = v.size()-1;
           while(l<r)
           {
               int mid = l+r>>1;
               if(!compare(v[mid],i)) r = mid;
               else l = mid+1;
           }
           v.push_back(i);
           if(compare(v[r],i)) r++;
           for(int i=v.size()-2;i>=r;i--) swap(v[i+1],v[i]);
       }
       return v;
    }
//     void cmp(vector<int> T,int sta){
//         if(T.size()==0) return;
//         vector<int> L,R;
//         for(int i=1;i<T.size();i++)
//           if(!compare(T[0],T[i])) L.push_back(T[i]);
//           else R.push_back(T[i]);
//         v[sta+L.size()] = T[0];
//         printf("%d %d\\n",cnt+L.size(),T[0]);
//         cmp(L,sta);
//         cmp(R,sta+L.size()+1);
//     }
};

以上是关于AcWing 113. 特殊排序的主要内容,如果未能解决你的问题,请参考以下文章

算法刷题AcWing 113. 特殊排序——二分

AcWing基础算法课Level-3 第一讲 基础算法

113. 特殊排序

AcWing 838. 堆排序

laravel特殊功能代码片段集合

AcWing 786. 第k个数