题目描述
给定一个长度为n的数组a,请你编写一个函数:
int unique(int a[], int size); //返回数组前size个数中的不同数的个数。
样例
输入样例:
5 3
1 1 2 4 5
输出样例:
4
算法1
暴力
让我们写一个去掉数字 a 中的前 size 个数字中重复的数字,只去掉前 size 个数字中的重复的数字,后面的数字不管,最后输出去重后的长度!
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
int n, a[1010], s;
int unique(int a[], int size) // 去掉前size个的重复数字
{
int ans = 0;
for (int i = 1; i <= size; i ++ )
{
for (int j = i+1; j <= size; j ++ ) // 从 i+1 开始, a[i] 和 a[i] 是相同的!
{
if (a[i] == a[j]) // 如果两个数字相同
{
ans ++; // 删除的数字
for (int x = j; x < n; x ++) // 去掉删除的数字,去掉的a[j]
a[x] = a[x+1];
size--; // 长度减一
j--; // j 的位置也要减一(这里很重要!)
}
}
}
return ans;
}
int main()
{
cin >> n >> s;
for (int i = 1; i <= n; i ++)
cin >> a[i];
cout << n-unique(a, s);
return 0;
}
想了两分钟才明白为啥要去掉删除的数字,因为可能会出现好几个相同数字的情况。