今天在做题的时候需要用的数组去重的算法,本人又太懒,在网上看到有标准库函数来解决这个问题,今天和大家分享一下。这个神奇的函数就是unique函数,现在我们来介绍一下unique函数-----
**unique函数
类属性算法unique的作用是从输入序列中“删除”所有相邻的重复元素。
该算法删除相邻的重复元素,然后重新排列输入范围内的元素,并且返回一个迭代器(容器的长度没变,只是元素顺序改变了),表示无重复的值**
现在我们看看怎么具体使用这个函数
#include<iostream>
#include<algorithm>//unique所在的头文件
using namespace std;
int main()
{int a[10] = {1,1,1,2,3,4,5,5,3,2};sort(a,a+10);//因为unique是去除相邻的相邻的重复元素,所以我们要先排序int n = unique(a,a+10) - a;//排序后的数值长度for(int i=0;i<n;i++)//遍历整个数组{cout<<a[i]<<" ";}return 0;
}
今天想了想人生不能那麽坠落呀!于是自己琢磨了几种去重的算法,几天和大家分享一下。
再次更新
第一种版本,比较low,但容易理解
#include<stdio.h>
int main()
{int a[10] = {1,1,1,2,3,4,5,5,3,2};int b[10];int count = 0;for(int i=0;i<10;i++){int k = a[i];int flag = 1;for(int j=i+1;j<10;j++){if(k==a[j]){flag = 0;break;}}if(flag==1){b[count++] = k;}else{continue;}}a[10] = {0};for(int i=0;i<count-1;i++){a[i] = b[i];printf("%d",a[i]);}return 0;
}
第二种版本
#include<stdio.h>
int main()
{int a[] = {1,2,1,4,2,1,4,2,4,3,5,2,3,5,3,2,2,5,3,1,1,1};//int b[n];int n = sizeof(a)/sizeof(a[0]);//求数组的长度//int count = 0;for(int i=0;i<n;i++){int k = a[i];for(int j=i+1;j<n;j++){if(k==a[j])//判断数组中是否有重的元素{for(int k=j;k<n-1;k++){a[k] = a[k+1];} n--;j--;//这一步非常重要,没有的话部分结果就会不正确}}}for(int i=0;i<n;i++){printf("%d ",a[i]);}return 0;
}