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

//问题:
//给你一个数组,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;
}

时间: 2024-11-02 23:38:00

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

mysql 中删除重复字段数据的方式

1.创建一张表 CREATE TABLE `user` ( `id` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `address` varchar(255) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2.插入对应数据 INSERT INTO `user` VALUES ('1', 'zhangsan', '20'

MSSQL如何在没有主键的表中删除重复数据

为了对重复数据进行实验,下面建一个设计不太好(没有主键)表并插入了一些重复数据: create database testdb use testdb ; go create table DupsNoPK (Col1 int Null, Col2 char(5) Null ); go insert DupsNoPK(Col1,Col2) Values(1,'abc'), (2,'abc'), (2,'abc'), (2,'abc'), (7,'xyz'), (7,'xyz'); 为了验证表确实有重

12 表中删除重复项

以下代码实现了从表中删除重复项的功能,请选择其中空白行应填入的正确代码(D) template<typename T> void removeDuplicates(list<T> &aList) {     T curValue;     list<T>::iterator cur, p;     cur = aList.begin();     while (cur != aList.end())     {         curValue = *cur;

arts打卡 从排序数组中删除重复项

Algorithm 从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2. 你不需要考虑数组中超出新长度后面的元素. 示例 2: 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应

通过双重for循环来找到JSON中不重复的数据

//通过双重for循环来找到JSON中不重复的数据 var count = 0; for ( i=0; i<json.length; i++) { for ( j=0; j<i; j++) { if ( json[j].api_id == json[i].api_id ) { count++; } } if ( count == 0 ) { kong.getApiName( json[i].api_id ); } }

【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】

[082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example, Given 1->2->

【LeetCode-面试算法经典-Java实现】【083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)】

[083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2

js在数组中删除重复的元素自保留一个

js在数组中删除重复的元素自保留一个 第一种思路是:遍历要删除的数组arr, 把元素分别放入另一个数组tmp中,在判断该元素在arr中不存在才允许放入tmp中 用到两个函数:for ...in 和 indexOf() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <script type="text/javascript"> var student = ['qiang','ming','tao','li','liang','you','qiang'

[LeetCode] 80. Remove Duplicates from Sorted Array II ☆☆☆(从有序数组中删除重复项之二)

https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii/discuss/27976/3-6-easy-lines-C%2B%2B-Java-Python-Ruby 描述 Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For example,Given sorted array A = [1,1