2023.2.21AcWing蓝桥杯集训·每日一题
知识点为二分。
AcWing113.特殊排序
题目描述
有
注意:不存在两个元素大小相等的情况。
也就是说,元素的大小关系是
然而,这是一道交互式试题,这些关系不能一次性得知,你必须通过不超过
现在请你把这
你可以通过我们预设的
例如,编号为
将
数据范围
输入样例
[[0, 1, 0], [0, 0, 0], [1, 1, 0]]
输出样例
[3, 1, 2]
解题思路
本题目除了二分,还可以借用归并排序的思路来求解
题目要求使用不超过
假设现在已经确定了前
C++代码
// 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 >> 1;
// res[mid] < i
if (compare(res[mid], i)) l = mid;
else r = mid - 1;
}
// 先放到最后
res.push_back(i);
// res[l]是最后小于i的数
// i插到res[l]的后面
for (int j = res.size() - 2; j > l; j --) swap(res[j], res[j + 1]);
// 边界条件,res[l]都大于i,那么i应和res[l]交换
if (compare(i, res[l])) swap(res[l], res[l + 1]);
}
return res;
}
};
本文来自博客园,作者:Cocoicobird,转载请注明原文链接:https://www.cnblogs.com/Cocoicobird/p/17141996.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!