1.STL:map
2.数组和结构体瞎搞
3.unique
//对于vector vector<int> v; vector<int>::iterator v_it; for(int i=1;i<=n;i++) scanf(“%d”,&v[i]); //在去重前先排好序 sort(v.begin(),v.end()); //unique操作后,v中元素从v.begin()到v_it的左闭右开区间 //的元素是不重复的,且v_it指向最后一个不重复元素的后面一个元素 v_it=unique(v.begin(),v.end()); //erase实现删除,去重得到真正不重复的元素 v.erase(v_it,v.end());
4.lower_bound
此函数这里是指单独的lower_bound,不是指那种map/set的;
然后参数类型:
lower_bound(start,end,val);
从start开始,到end,通过二分查找,左闭右开的找到大于等于val的第一个值就返回指针,
然后再与数组首地址做差,这样就得到了一个目标的下标值。
for (int i = 1; i <= n; i++)scanf("%d", &a[i]), b[i] = a[i]; sort(b + 1, b + n + 1); B = unique(b + 1, b + n + 1) - (b + 1); for (int i = 1; i <= n; i++) a[i] = lower_bound(b + 1, b + B + 1, a[i]) - b,t[a[i]]++;
以上代码配合了unique;
a[i]和b[i]存相同的值,之后b[i]去重操作了,然后在t[]数组统计a[i]中不同元素的出现次数