acwing113. 特殊排序
题目来源
题目难度
2星
算法标签
二分
参考程序
// 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> ans(1, 1); //(a, b)初始化a个b
for(int i = 2; i <= N; i ++)
{
int n = ans.size();
int l = 0, r = n-1;
while(l < r)
{
//找到可以插入位置的前一个数
int mid = (l+r+1)/2;
if(compare(i, ans[mid])) // i < ans[mid]
{
//左半边一定有解,右半边不一定
r = mid-1;
}
else
{
//右半边一定有解, 左半边不一定
l = mid;
}
}
//对于l==r==0还需要重新判断一下是不
//是指针无奈才留在这里,实际要再往左
if(l == 0 && compare(i, ans[0])) //i < ans[i]
{
l --;
}
ans.push_back(i);
//这里n-1是倒数第二个数
for(int k = n-1; k > l; k --)
{
swap(ans[k+1], ans[k]);
}
}
return ans;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现