今天在做题的时候需要用的数组去重的算法,本人又太懒,在网上看到有标准库函数来解决这个问题,今天和大家分享一下。这个神奇的函数就是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;
}
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐