一开始写的程序只能处理重复一次的,又是confuse的一天
到现在也不知道为什么TAT
然后加了个100次的常数级循环过了…
#include<iostream>
#include<algorithm>
using namespace std;
int arr[105];
int main() {
int N;
scanf_s("%d", &N);
for (int i = 0; i < N; i++) {
scanf_s("%d", &arr[i]);
}
int num = N;
sort(arr, arr + N);
for (int j = 0; j < 100; j++) {
for (int i = 0; i < num - 1; i++) {
if (arr[i] == arr[i + 1]) {
for (int tmp = i + 1; tmp <= num - 1; tmp++) {
arr[tmp - 1] = arr[tmp];
}
num--;
}
}
}
printf("%d\n", num);
for (int i = 0; i < num; i++)
printf("%d ", arr[i]);
return 0;
}
P.S.在别的博主那里看到了用unique()解决:
int num=unique(arr,arr+N)-arr;
该函数将arr的重复元素移到了arr的末尾,且得出arr非重复部分的长度