算法(19)-merge去重-两个整形有序数组 --C++

 比链表的合并去重更容易实现。直接上代码,供各位参考。
 去重方法:1.用vector<int > vc保存新数组值时:对于有序数组, 新加的数!=数组的最后一个数
                   2.用set<int>intset;保存自然去重
1.vector

//合并两个有序数组
//void mergeTwoarr(int arr1[], int arr2[])
int arr1[9] = { 1,2,3,4,5, 5, 6, 6, 7 };
int arr2[11] = { 2,3, 4, 4, 5, 6, 8, 8, 9, 10, 11 };
void mergeTwoarr(int arr1[], int arr2[])
{	
//	int num[] = { 0,1,2,3,4,5,6,7,8,9,10 };
//	int len = sizeof(num) / sizeof(num[0]);

	printArr(arr1,9);
	cout<<"**********************"<<endl;
	printArr(arr2,11);
	int i = 0, j = 0;
	int len1 = 9;
	int len2 = 11;
	vector <int> vrc;

	while (i < len1 && j < len2) 
	{
		if (arr1[i] < arr2[j])
		{
			//vrc不可为空,len-1会越界
			//去重:最后一个数与添加的数不同
			int vrclen = vrc.size();
			if (vrclen ==0 || vrc[vrclen - 1] !=arr1[i])
			{
				vrc.push_back(arr1[i]);
			}
			//注意不管有没有重复都会++;j同理
			i++;
		}
		else 
		{
			int vrclen = vrc.size();
			if (vrclen == 0|| vrc[vrclen - 1] != arr2[i])
			{
				vrc.push_back(arr2[j]);
			}
			j++;
		}
	}
	//arr1多出来的
	while (i < len1) 
	{
		int vrclen = vrc.size();
		if (vrclen == 0 || vrc[vrclen - 1] != arr1[i])
		{
			vrc.push_back(arr1[i]);
		}
		i++;
	}
	//arr2多出来的
	while (j < len2)
	{
		int vrclen = vrc.size();
		if (vrclen == 0 || vrc[vrclen - 1] != arr2[i]) 
		{
			vrc.push_back(arr2[j]);
		}
		j++;
	}
	cout << "it****************" << endl;
	for (int i = 0; i < vrc.size(); i++)
	{
		cout <<"vrc[i]=" <<vrc[i] << endl;
	}
	cout << "it****************" << endl;
	for (auto it = vrc.begin(); it != vrc.end(); it++)
	{
		cout<<*it<<endl;
	}
}


2.set
 

void mergeTwoarrSet(int arr1[], int arr2[])
{
	//	int num[] = { 0,1,2,3,4,5,6,7,8,9,10 };
	//	int len = sizeof(num) / sizeof(num[0]);

	printArr(arr1, 9);
	cout << "**********************" << endl;
	printArr(arr2, 11);
	int i = 0, j = 0;
	int len1 = 9;
	int len2 = 11;
	
	set<int>intset;

	while (i < len1 && j < len2)
	{
		if (arr1[i] < arr2[j])
		{
			intset.insert(arr1[i]);
			i++;
		}			
		else
		{
			intset.insert(arr2[i]);
			j++;
		}
	}
	//arr1多出来的
	while (i < len1)
	{
		intset.insert(arr1[i]);
		i++;
	}
	//arr2多出来的
	while (j < len2)
	{
		intset.insert(arr2[j]);
		j++;
	}
	cout << "it****************" << endl;
	
	for (auto it = intset.begin(); it != intset.end(); it++)
	{
		cout << *it << endl;
	}
}



 

posted @ 2020-02-07 06:59  jasmineTang  阅读(241)  评论(0)    收藏  举报