两个数组的交集

两个数组的交集,第1张

两个数组交集

1.规则:给定两个数组,写一个函数来计算他们的交集,输出结果的每个元素一定是唯一的

例如:arr1[]={1,2,3,4,5,6,7,8,9,10};arr2[]={7,5,3,1,9,9,9,10};交集arr[]={1,3,5,7,9,10};

2.思路:找出交集必定需要比较大小,可先进行排序使比较时更为方便,排序好之后分别arr1与arr2中的元素从首元素开始比较,(从小到大进行排序)若arr1中的元素大于arr2中的元素,则让arr2指向后一位元素在进行比较,若arr1中的元素小于arr2中的元素,则让arr1指向后一位元素在进行比较,若arr1中的元素与arr2中的元素相同,则把元素存放至arr数组中,若arr1、arr2数组中下一个元素与上一个元素相同,则跳过此元素向后寻找,由于需要比较多次可用循环来实现,若比较次数超过其中一个数组的长度,则比较结束。

// 两个数组的交集
#include 
#include 
void My_lin(int arr[],int sz)//对数组进行排序
{
	int i = 0;
	int j = 0;
	for (i = 0; i < sz - 1; i++)
	{
		for (j = 0; j < sz - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int t = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = t;
			}
		}
	}
}
int lin(int arr1[], int arr2[],int arr[],int sz1,int sz2)//查找交集
{
    int i = 0, j = 0;
    int li = 0;//控制存放元素的位置
    while (i < sz1 && j < sz2)//控制其两数组比较元素的次数
    {
        int qin = arr1[i];
        int yan = arr2[j];
        if (qin == yan)
        {
            arr[li] = qin;//若两数组中元素相同,则存放至arr数组中
            li++;//让下标指向下一个位置
            while (i < sz1 && arr1[i] == qin)//过滤掉nums1中重复元素
            {
                i++;
            }
            while (j < sz2 && arr2[j] == yan)//过滤掉nums2中重复元素
            {
                j++;
            }
        }
        else if (qin < yan)//若nums1[i]指向的元素小于nums2[j]指向的元素,则让nums1向后继续找
        {
            i++;
        }
        else//若nums1[i]指向的元素大于nums2[j]指向的元素,则让nums2向后继续找
        {
            j++;
        }
    }
    return li;//返回其元素个数
}
int main()
{
    int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
    int arr2[] = { 7,5,3,1,9,9,9,10 };
    int sz1 = sizeof(arr1) / sizeof(arr1[0]);
    My_lin(arr1, sz1);//对数组进行排序
    int sz2 = sizeof(arr2) / sizeof(arr2[0]);
    My_lin(arr2, sz2);
    int* arr=(int*)malloc(sizeof(int) * sz1);//开辟一块与nums1大小一样的空间,存放两数组的交集元素
    int li=lin(arr1, arr2, arr, sz1, sz2);//查找交集
    for (int i = 0; i < li; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718886.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存