问题
明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。
数据范围: 1≤N≤1000 ,输入的数字大小满足 :1≤val≤500
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数,输出多行,表示输入数据处理后的结果。
例如:
知识点
知识点:数组
问题分析
生成了N个1到500之间的随机整数,我们需要去除其中重复的数字并从小到大排序,我们的第一想法就是:好家伙,这不是完美符合set容器吗?set容器内数值唯一且默认从小到大。(代码1)
此外,在搞定之后看讨论区,发现一个老哥的代码也很有趣,属于用数组完美卡住了题目要求,其思想是用一个全为0的数组作为标记,以该数组取反为进入循环条件,每出现一次随机数,以随机数作为数组下标将该个数组值改为1,这样下标即为随机数的值,完美搞定排序且数值唯一。学习后一并记录在下。(代码2)
代码1
#include <iostream>
#include <set>
using namespace std;
int main() {
int n,N;
cin>>N;
set<int> setN;
while(N--)
{
cin>>n;
setN.insert(n);
}
for(auto &it:setN)
{
cout<<it<<endl;
}
return 0;
}
代码2
#include <iostream>
#include <set>
using namespace std;
int main() {
int n,N;
cin>>N;
int A[1001]={0};
while(N--){
cin>>n;
if(!A[n]){
A[n]=1;
}
}
for(int i=0;i<1001;i++){
if(A[i]){
cout<<i<<endl;
}
}
}
结果
代码1
运行时间 | 占用内存 |
---|---|
3ms | 284KB |
代码2
运行时间 | 占用内存 |
---|---|
4ms | 460KB |