题解:P1138 第 k 小整数
正如题解区的大佬们所说,此题方法很多。
第一种:计数排序。
可明显,题目给我们的正整数不会很大,于是我们就可以用。
循环输入,对应的地方如果为
每次取最大值,可以为后面减少部分数据的循环。
循环结束后,如果变量小于
循环从
代码如下:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,x,t,ma;
unordered_map<int,bool> mp;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
if(mp[x]==0){
t++;
}
mp[x]=1;
ma=max(ma,x);
}
if(t<m){
cout<<"NO RESULT";
}
t=0;
for(int i=1;i<=ma;i++){
if(mp[i]){
t++;
}
if(t==m){
cout<<i;
return 0;
}
}
return 0;
}
第二种,去重:
很好理解,此题由题目可知要去重,一样简单,代码就不放了。
后记:谢谢管理员审核,管理员辛苦了。