题目描述
给定一个长度为$n$的数组$a$,请你编写一个函数:
int get_unique_count(int a[], int n); // 返回数组前n个数中的不同数的个数
输入格式
第一行包含一个整数$n$。
第二行包含$n$个整数,表示数组$a$。
输出格式
共一行,包含一个整数表示数组中不同数的个数。
数据范围
$1≤n≤1000$
输入样例:
5
1 1 2 4 5
输出样例:
4
代码&思路
菜鸡做法
#include<iostream>
#include<algorithm>
using namespace std;
int a[1010],s[1010];
int num=0;
int get_unique_count(int a[], int n)
{
for(int i=0;i<n;i++)
{
if(a[i+1]==a[i])//如果遇到相同的
{
for(int j=i+1;j<n;j++)
{
if(a[j+1]!=a[j])//找到不是相同的为止
{
i=j;//中间部分跳过
break;
}
}
}
num++;//计数,注意只能放在这里,因为中间的一大堆都是同一个数
}
return num;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);//直接排序
cout<<get_unique_count(a,n);
return 0;
}
$y$总做法
#include<iostream>
#include<algorithm>
using namespace std;
int a[1010];
int n;
int get_unique_count(int a[], int n)
{
int k=1;
for(int i=1;i<n;i++)
{
if(a[i]!=a[k-1])//如果不相等
{
a[k++]=a[i];//存储
}//否则不存储,即跳过
}
return k;
}
int main()
{
cin>>n;
for(int i=0;i<=n;i++)
{
cin>>a[i];
}
sort(a,a+n);//排序
cout<<get_unique_count(a,n);
return 0;
}