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;
}
};