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

leetcode349. 两个数组的交集 C语言_第1张图片
考虑到输出结果中的每个元素一定是唯一的。
用的笨办法,新建一个数组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//flag用来标识数组re中是否已经存在nums1和nums2的交集,flag==0,则只要比较nums2[j]==nums1[i]
    if(flag==0)
         for(j=0;jif(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;tif(nums1[i]==re[t]) { f=1;break;}
       if(f==1) continue;//一开始写成了break
          for(j=0;jif(nums2[j]==nums1[i]) 
              { flag=1;re[k++]=nums1[i];break;}
            }        
       }
    }   
    * returnSize=k;
    return re;

}

你可能感兴趣的:(leetcode)