题解 CF1008C 【Reorder the Array】
这个题目一看就是大的对小的,所以要从大到小排序,因为已经有人用sort了,这里就来一发map+桶排吧!
先来解释一下桶排为什么用map,首先这道题目限时2s,正常桶排是要从1~MAXai,这里ai≤10^9,1s就用掉了,加上两遍n次遍历,2s可能会TLE。
而map有个好处:
map <int, int> mp;
mp[1] = 1;
mp[3] = 3;
mp[2]是空的,所以如果使用迭代器遍历输入数据没有的下标就不用花时间遍历了!!!
代码如下:
#include <iostream>
#include <map>
using namespace std;
map <int, int> box, mp;
int main()
{
int n, a, cur = 0, x = 1, ans = 0;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> a;
mp[a]++;
}
for(map <int, int>::reverse_iterator it = mp.rbegin(); it != mp.rend(); ++it)
{
int v = it -> first;
int w = it -> second;
for(int j = 1; j <= w; j++)
{
cur++;
box[cur] = v;
}
}
for(map <int, int>::iterator it = box.begin(); it != box.end(); ++it)
{
if(box[x] > it -> second)
{
ans++;
x++;
}
}
cout << ans << endl;
return 0;
}
这里说下:
reverse_iterator
因为我们要从大到小排序,桶排迭代器肯定要从rbegin到rend,而map的iterator不支持反向遍历,要用reverse_iterator
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现