<---
大佬们点个赞吧qwq
题目描述
给定一个包含 n 个整数的数组,请你删除数组中的重复元素并将数组从小到大排序后输出。
输入格式
第一行包含一个整数 n。
第二行包含 n 个不超过 1000 的正整数。
输出格式
输出去重和排序完毕后的数组。
数据范围
1lenle1000
输入样例:
6
8 8 7 3 7 7
输出样例:
3 7 8
算法
(STL) O(nlogn)
只需要用 C++ STL 里面的sort
和unique
进行去重(同时排序)即可(注意必须先排序再去重)。
时间复杂度
sort
的时间复杂度是 O(nlogn),unique
的时间复杂度是 O(n),所以总的时间复杂度就是 O(nlogn)。
空间复杂度
只需要存一个 n 个元素的数组,所以空间复杂度是 O(n)。
C++ 代码
#include <iostream>
#include <algorithm> // STL快乐
using namespace std;
const int N = 1010;
int n;
int a[N];
int main()
{
cin >> n;
for (int i = 0; i < n; i ++ ) cin >> a[i];
sort(a, a + n); // 排序
int e = unique(a, a + n) - a; // 去重
for (int i = 0; i < e; i ++ ) cout << a[i] << ' ';
return 0;
}
用桶排其实就可以了
ddd,但是STL更简单
自己对比一下
#include<bits/stdc++.h> using namespace std; int n,i,a[114514],x; int main() { cin>>n; for(i=1;i<=n;i++) { cin>>x; a[x]=1; } for(i=1;i<=1111;i++) if(a[i]) cout<<i<<' '; return 0; }
额
每日一题还有这么氵的题,我怎么不知道,好久没看了(bzy)你main函数里面就有8行
我完全可以压成6行
5行
我可以用压行器压成一行(逃)int main() { cin >> n; for (int i = 0; i < n; i ++ ) cin >> a[i]; sort(a, a + n); // 排序 for (int i = 0; i < unique(a, a + n) - a; i ) cout << a[i] << ' '; return 0; }
#include <bits/stdc++.h> using namespace std; int n, a[1010];
谁不会啊
对比个啥
.
好吧