
compare函数最多被调用10000次,n2的排序无效。
假设我们已经前i个数已经排好了,我们现在要把第i+1个数插入排好的数组当中,其实就是在排好的i个数中找一个最大的小于它的数,然后插入这个数的后面,二分即可。
// 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;
for(int i=1;i<=N;i++){
int l=0,r=res.size()-1;
while(l<r){
int mid=l+r+1>>1;
if(compare(res[mid],i))l=mid;
else r=mid-1;
}
if(res.size()&&compare(res[l],i))res.insert(res.begin()+l+1,i);
else res.insert(res.begin(),i);
}
return res;
}
};
该博客讨论了一种优化排序算法的方法,通过二分查找在已排序的数组中插入新元素,确保排序效率。在最大调用次数限制为10000次的compare函数下,这种方法能有效地维护数组的有序状态。核心思想是在已排序的子数组中找到合适的位置插入新元素,从而减少比较次数。
4621

被折叠的 条评论
为什么被折叠?



