leetcode349. 两个数组的交集 C语言

本文介绍了一种求两个数组交集的简单方法,并讨论了其效率问题。通过双层循环找到两个数组中的相同元素,同时确保输出结果中元素的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
考虑到输出结果中的每个元素一定是唯一的。
用的笨办法,新建一个数组3用来存放交集,双层循环,数组1里的数逐个与数组2进行比较,若相等且之前不在数组3中,则放入数组3。
但其实这道题可以搜到很多简单高效的解决方法,比如先排序再比较、或是使用set等等。

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
    int i,j,k=0,flag=0;
    int lens=nums1Size>nums2Size?nums1Size:nums2Size;
    int* re =(int*)malloc(sizeof(int)*lens);
    if(nums1Size==0) { * returnSize=k; return nums1; }
    if(nums2Size==0) { * returnSize=k; return nums2; }
 for(i=0;i<nums1Size;i++)
    {//flag用来标识数组re中是否已经存在nums1和nums2的交集,flag==0,则只要比较nums2[j]==nums1[i]
    if(flag==0)
         for(j=0;j<nums2Size;j++)
           { if(nums2[j]==nums1[i]) 
               {flag=1;re[k++]=nums1[i];break;} 
           }      
//flag==1说明re中已存在交集数字,则nums1[i]还需要与re数组中的每个元素进行比较,保证输出结果中的每个元素一定是唯一的           
    else if(flag==1)
     {int t,f=0;
               for (t=0;t<k;t++) 
                   if(nums1[i]==re[t]) { f=1;break;}
       if(f==1) continue;//一开始写成了break
          for(j=0;j<nums2Size;j++)    
            {
              if(nums2[j]==nums1[i]) 
              { flag=1;re[k++]=nums1[i];break;}
            }        
       }
    }   
    * returnSize=k;
    return re;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值