C/C++ 统计两个数组中不同元素的个数

原创 2016年08月30日 11:18:46

C/C++ 统计两个数组中不同元素的个数

//统计两个数组中不同元素的个数

//数组中不含重复元素
#include "stdafx.h"
#include "stdio.h"
#include"stdlib.h"
#include<iostream>

using namespace std;

int Match2Array(int * pArray1, int len1, int * pArray2, int len2)
{
	for (int i = 0; i < len1-1; i++)
	{
		for (int j = 0; j < len1-i-1; j++)
		{
			if (pArray1[j]>pArray1[j + 1])
			{
				int temp = pArray1[j];
				pArray1[j] = pArray1[j + 1];
				pArray1[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < len2 - 1; i++)
	{
		for (int j = 0; j < len2 - i - 1; j++)
		{
			if (pArray2[j]>pArray2[j + 1])
			{
				int temp = pArray2[j];
				pArray2[j] = pArray2[j + 1];
				pArray2[j + 1] = temp;
			}
		}
	}
	//至此,两个数组都变成了有序数组,从小到大排列
	int *p1 = pArray1 + len1;
	int *p2 = pArray2 + len2;
	int num = 0;//相同元素的个数

	while (pArray1 < p1&&pArray2 < p2)
	{
		if (*pArray1 == *pArray2)
		{
			num++;
			pArray1++;
			pArray2++;
		}
		else if (*pArray1 < *pArray2)
		{
			pArray1++;
			continue;
		}
		else
		{
			pArray2++;
			continue;
		}
	}
	return len1 + len2 - 2 * num;

}
int main()
{
	int f[4] = { 1, 3, 4, 7 };
	int g[5] = { 2, 3, 5, 7, 8 };
	int size=Match2Array(f, 4, g, 5);

	cout << size << endl;

	return 0;
}

//只含一个重复元素时
#include "stdafx.h"
#include "stdio.h"
#include"stdlib.h"
#include<iostream>

using namespace std;

//统计数组中相同元素的个数
int *reNum(int *p, int size)
{
	int arr[10] = { 0 };

	for (int i = 0; i < size;i++)
	{
		arr[p[i]]++;
	}
	return arr;
}
int Match2Array(int * pArray1, int len1, int * pArray2, int len2)
{
	for (int i = 0; i < len1 - 1; i++)
	{
		for (int j = 0; j < len1 - i - 1; j++)
		{
			if (pArray1[j]>pArray1[j + 1])
			{
				int temp = pArray1[j];
				pArray1[j] = pArray1[j + 1];
				pArray1[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < len2 - 1; i++)
	{
		for (int j = 0; j < len2 - i - 1; j++)
		{
			if (pArray2[j]>pArray2[j + 1])
			{
				int temp = pArray2[j];
				pArray2[j] = pArray2[j + 1];
				pArray2[j + 1] = temp;
			}
		}
	}
	int *b, *c;
	b = reNum(pArray1, len1);
	c = reNum(pArray2, len2);
	//至此,两个数组都变成了有序数组,从小到大排列
	int *p1 = pArray1 + len1;
	int *p2 = pArray2 + len2;
	int num = 0;//相同元素的个数
	int f;
	while (pArray1 < p1&&pArray2 < p2)
	{
		if (*pArray1 == *pArray2)
		{
			num++;
			f = *pArray1;
			pArray1++;
			pArray2++;
		}
		else if (*pArray1 < *pArray2)
		{
			pArray1++;
			continue;
		}
		else
		{
			pArray2++;
			continue;
		}
	}
	
	num = num+b[f]+c[f];

	return len1 + len2 - num;

}
int main()
{
	int f[5] = { 1, 3, 3, 4, 7 };
	int g[6] = { 2, 3, 5, 9, 8 ,6 };
	int size=Match2Array(f, 5, g, 6);
	/*int f[3] = { 1, 3, 3};
	int g[3] = { 2, 3, 5 };
	int size = Match2Array(f, 3, g, 3);*/
	cout << size << endl;

	return 0;
}

//数组中包含多个重复元素
#include "stdafx.h"
#include "stdio.h"
#include"stdlib.h"
#include<iostream>

using namespace std;

//统计数组中相同元素的个数
int *reNum(int *p, int size)
{
	int arr[10] = { 0 };

	for (int i = 0; i < size;i++)
	{
		arr[p[i]]++;
	}
	return arr;
}
int Match2Array(int * pArray1, int len1, int * pArray2, int len2)
{
	for (int i = 0; i < len1 - 1; i++)
	{
		for (int j = 0; j < len1 - i - 1; j++)
		{
			if (pArray1[j]>pArray1[j + 1])
			{
				int temp = pArray1[j];
				pArray1[j] = pArray1[j + 1];
				pArray1[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < len2 - 1; i++)
	{
		for (int j = 0; j < len2 - i - 1; j++)
		{
			if (pArray2[j]>pArray2[j + 1])
			{
				int temp = pArray2[j];
				pArray2[j] = pArray2[j + 1];
				pArray2[j + 1] = temp;
			}
		}
	}
	int *b, *c;
	b = reNum(pArray1, len1);
	c = reNum(pArray2, len2);
	//至此,两个数组都变成了有序数组,从小到大排列
	int *p1 = pArray1 + len1;
	int *p2 = pArray2 + len2;
	int num = 0;//相同元素的个数
	int k=0,f[10] = { 0 };

	while (pArray1 < p1&&pArray2 < p2)
	{
		if (*pArray1 == *pArray2)
		{
			num++;
			f[k++] = *pArray1;
			pArray1++;
			pArray2++;
		}
		else if (*pArray1 < *pArray2)
		{
			pArray1++;
			continue;
		}
		else
		{
			pArray2++;
			continue;
		}
	}
	for (int kk = 0; kk < sizeof(f) / sizeof(f[0]); kk++)
	{
		num = num + b[f[kk]] + c[f[kk]];
	}

	return len1 + len2 - num;

}
int main()
{
	int f[5] = { 1, 3, 3, 7, 7 };
	int g[6] = { 2, 3, 5, 7, 8 ,6 };
	int size=Match2Array(f, 5, g, 6);
	/*int f[3] = { 1, 3, 3};
	int g[3] = { 2, 3, 5 };
	int size = Match2Array(f, 3, g, 3);*/
	cout << size << endl;

	return 0;
}

备注:上面的程序在统计相同元素的个数时只考虑到了实际数组的取值范围是:0~9的情况,所以在reNum()函数中只做这样的处理:
int arr[10] = { 0 };
其它的可以根据自己的需要进行调整。

版权声明:本文为@那年聪聪 原创文章,未经博主允许不得转载。

相关文章推荐

面试题:统计一个数组中不重复出现的元素个数

假设是一个整数数组,事先已经按照升序或者降序拍好次序,但是数组中的若干元素重复出现。给出代码要求统计该数组中不重复出现的元素个数。例如整数数组: int[] array=new int[]{1,1,1...

求数组中不同元素的个数

今天莫名的想到如果存在一个有元素重复出现的数组,那么如何求出这个数组中不同元素的个数。越想越不得解。然后搜索了关键词,居然找了大半天(百度的结果我都翻了好几页才找到满足要求的解答。)所以原创这篇博客,...

【C++】判断元素是否在vector中,对vector去重,两个vector求交集、并集

C++虽然对vector封装了大量的函数,比如判断元素是否在vector中find、去重的unique,还有在algorithm类中对两个vector求交集、并集的函数,但是,这些函数是不可以直接ve...

创建a,b两个数组,元素个数由用户分别输入,元素的值由随机数生成,最大值不超过20。

创建a,b两个数组,元素个数由用户分别输入,元素的值由随机数生成,最大值不超过20。 功能: 1. 输出a,b数组的各元素值; 2. 找出在数组a中第一个出现的、与b中含有的值相同的元素位置,并...

PHP分割两个数组的相同元素和不同元素的两种方法

一、举例说明 例如有两个数组A和B(当然这个A和B也可以是key=>value形式) A = array('tt','cc','dd','mm') B = array('ad','tt',&#...

iOS小问题--使用NSPredicate比较两个数组中相同(不同)的元素

比较两个数组(或者是set)中相同(不同)的元素,一般用在考试多选题比较答案这种类似功能的场景中。我就简单记录一下,以此为契机去学习 谓词 和 正则表达式。这大大提高了效率!!真的 //把数据源...

10.1-2 在一个数组A[1..n]中实现两个栈,使得两个栈元素个数之和不为n时,两者不会上溢

/*在一个数组A[1..n]中实现两个栈,使得两个栈 元素个数之和不为n时,两者不会上溢*/ #include #define n 6 typedef char ElemType; typedef i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)