113. 特殊排序

第一次做交互题,这种题只需要写一个函数就行了,返回要返回的,我们可以假设前面也排好序了,因为是单调递增的,我们可以二分出来要插入数的位置,二分出比他小的数的位置,然后从后面往前面依次交换放到该位置后面就行了,特判一下如果没有比他小的数,那就把它放到最前面。

// 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> specialSort(int N) {
   
        vector<int> res;
        res.push_back(1);
        for(int i=2;i<=N;i++)
        {
   
            int l=0 ,r= res.size()-1;
            while(l<r)
            {
   
                int mid= (l+r+1)/2;
                if(compare(res[mid],i)) l=mid;
                else        r=mid-1;
            }
            res.push_back(i);
            for(int j=res.size()-2;j>l;j--)
            swap(res[j],res[j+1]);
             if (!compare(res[l], i)) swap(res[l], res[l + 1]);
        }
        return res;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务