码迷,mamicode.com
首页 > 编程语言 > 详细

C++中删除重复的数据并且输出(相当与shell脚本里面的sort -u)

时间:2015-04-27 11:24:07      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

//问题:
//给你一个数组,a[]={1,1,1,1,1,2,2,2,2,3,3,3,4,5,6}
//要输出的结果是1,2,3,4,5,6.(去除重复的数字,要求时间空间的考虑).


#include <iostream>
using namespace std;

struct Node
{
	int data;
	Node *next;
	Node():data(-1),next(NULL){}
};
//时间复杂度大幅度减少,但是增加了一定的空间复杂度。
class Hash
{
	public:
	Hash(int a[],int n)
	{
		NodeTable = new Node[7];
		for(int i=0;i<n;i++)
		{
			int index = HashIndex(a[i]);//寻找a[i]的下标,并且在hash表查找该值是否存在,不存在我们则以链表形式插入。
			NodeTable[index].data=1;//初始化为-1,表示在该下标下面没有数值,如果出现index等于该下标则将该下标标记为1,表示有东西存着呢!
			Node* p = NodeTable[index].next;
			
			while(p!=NULL && p->data!=a[i])
			{
				p=p->next;
			}
			if(p==NULL)
			{
				Node *s = new Node();
				s->data = a[i];
				NodeTable[index].next=s;
			}
		}
	}
	void Show()
	{
		for(int i=0;i<7;i++)
		{
			if(NodeTable[i].data!=-1)
			{
			 Node *p = NodeTable[i].next;
				while(p!=NULL)
				{
					cout<<" "<<p->data<<" ";
					p = p->next;
				}
			}	
		}
		cout<<endl;
	}
	int HashIndex(int x)
	{
		return x%7;
	}
	private:
	Node *NodeTable;
};
int main()
{
	int a[]={1,2,2,1,1,1,3,4,5};
	Hash sh(a,9);
	sh.Show();
	return 0;
}




#include <iostream>
#include <stdlib.h>
using namespace std;
//粗暴的删减法,时间复杂度稍微高了一些,空间复杂度比较低。
void Grial(int a[],int& n)//这里的n用引用传入,因为数组大小会在我删减重复数值时动态改变,引用传入,我就不需要记录n的实际值了。
{
	int i=0;
	int j;
	int k;
	for(;i<n;)
	{
		for(j=i+1;j<=n;j++)
		{
			if(a[i]==a[j])
				{
					for(k=j;k<n;k++)
					{
					 a[k]=a[k+1];//删除与a[i]重复的值,并且将n减1;
					}
					n--;
				}
				if(j>=n)
				{
					i++;
				}
		}
		if(a[i]==a[i+1])
		{
			for(k=i;k<n;k++)
				{
					a[k]=a[k+1];
				}
			n--;
		}
	}	
}
int main()
{
	int a[100];
	for(int i=0;i<100;i++)
	{
		a[i]=rand()%100;
	}
	int b=99;
	Grial(a,b);
	for(int i=0;i<b;i++)
	{
		cout<<a[i]<<endl;
	}	
	return 0;
}

C++中删除重复的数据并且输出(相当与shell脚本里面的sort -u)

标签:

原文地址:http://blog.csdn.net/liuhuiyan_2014/article/details/45306337

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!