算法-两个数组的交集

打印 上一主题 下一主题

主题 670|帖子 670|积分 2010

01、题目分析

给定两个数组 nums1 和 nums2 返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。【leetcode
示例1
  1. 输入: nums1 = [1,2,2,1], nums2 = [2,2]
  2. 输出: [2,2]
复制代码
示例2
  1. 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
  2. 输出:[9,4]
复制代码
题解分析

题目函数返回值是int*,也就是返回一个数组,首先创建所需返回的数组ret,大小是fmax(nums1Size,nums2Size),然后定义两个指针i,j,分别指向nums1,nums2,k记录ret中元素个数。

然后进行遍历,将nums1中的每一个元素与nums2作比较,当nums1 == nums2时候,将相等的值放入ret,然后k++,并将nums1和nums2[j]分别置为-1,避免重复计算。

题解
  1. int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
  2. {
  3.   int *res = (int *)malloc(sizeof(int) * fmax(nums1Size,nums2Size));//申请一块内存,大小是nums1Size和nums2Size的最大值
  4.   int i,j,k = 0;
  5.   for( i = 0; i < nums1Size; i++)
  6.   {
  7.     for( j = 0; j < nums2Size; j++)
  8.     {
  9.       //如果 nums1[i] == nums2[j],那么将此值放入ret数组中,然后清空该位置元素【置-1】
  10.       // 然后跳出本次循环
  11.       if(nums1[i] == nums2[j])
  12.       {
  13.         res[k++] = nums1[i];
  14.         nums1[i] = -1;
  15.         nums2[j] = -1;
  16.         break;
  17.       }
  18.     }
  19.   }
  20.   // 返回结果数组以及长度
  21.   *returnSize = k;
  22.   return res;
  23. }
复制代码
测试结果
  1.   int nums1Size = 4, nums2Size = 2;
  2.   int nums1[nums1Size] = {1,2,2,1};
  3.   int nums2[nums2Size] = {2,2};
复制代码
  1.   int nums1Size = 3, nums2Size = 5;
  2.   int nums1[nums1Size] = {4,9,5};
  3.   int nums2[nums2Size] = {9,4,9,8,4};
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表