题目链接
https://www.acwing.com/problem/content/description/115/
分析
考虑如何将某元素插入已排好序的序列中,
尝试一下会发现,虽然序列不满足整体的单调性,但二分依然可以找到一个合法位置。
这样即可保证询问次数不会超出限制,总时间复杂度需不超过 O ( n 2 ) O(n ^ 2) O(n2)。
另外本题是一道交互式试题,注意格式。
AC代码
class Solution {
public:
vector<int> specialSort(int N) {
vector<int> ans;
ans.push_back(1);
for (int i = 2; i <= N; ++i) {
int l = 0, r = i - 1;
while (l < r) {
int mid = (l + r) >> 1;
if (compare(i, ans[mid])) r = mid;
else l = mid + 1;
}
ans.push_back(i);
for (int j = ans.size() - 1; j > l; --j) swap(ans[j], ans[j - 1]);
}
return ans;
}
};