AC代码;
#include <iostream> //常用开头模板,保存在文档,下次直接用
#include <algorithm>
#include <cstring>
#include <queue>
#define sx first
#define sy second
using namespace std;
typedef long long LL;
typedef pair<int,int>PII;
const int N=100010,mod=1e9+7;
int dx[]={1,-1,0,0}; //常用开头模板,保存在文档,下次直接用
int dy[]={0,0,1,-1};
int n,m;
int g[N];
int main()
{
int t;
cin>>t;
while (t--)
{
cin>>n;
int res=0;
for(int i=0;i<n;i++)
{
cin>>g[i];
if(g[i]>0)
res++;
}
sort(g,g+n);
if(g[0]==0)
cout<<res<<endl;
else
{
int ans=unique(g,g+n)-g;
if(ans==n)cout<<res+1<<endl;//没有重复的数字’
else cout<<res<<endl;//有重复的数字;
}
}
return 0;
}
C++中unique() 函数;
- unique的作用是“去掉”容器中相邻元素的重复元素(不一定要求数组有序),它会把重复的元素添加到容器末尾(所以数组大小并没有改变),而返回值是去重之后的尾地址,并不一定是最后一个位置。
- 由于返回的是容器末尾,所以如果想得到去重后的size,需要减去初始地址
g[]={1,2,2,3};
int ans=unique(g,g+n)-g;
g[]={1,2,3,2};
下标 ans=2