- 依次将每个数插入ans中,插入前二分找到第一个比他大的位置
class Solution {
public:
vector<int> specialSort(int N) {
vector<int> ans;
for(int i=1;i<=N;i++){
int l=0, r=ans.size();
while(l<r){
int mid=(l+r)>>1;
if(compare(i,ans[mid])) r=mid;
else l=mid+1;
}
ans.insert(ans.begin()+l,i);
}
return ans;
}
};
为什么这里是r = ans.size() , 下标从0开始,我认为是
r = ans.size() -1
, 疑惑。因为要找到第一个比i大的数的位置,有可能ans里不存在这样的数,那么会返回r = ans.size(), 然后将i插入到最后一个位置