算法-两个数组的交集


01、题目分析

给定两个数组 nums1 和 nums2 返回它们的交集。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序 。【leetcode

示例1

输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2,2]

示例2

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]

题解分析

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

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

题解

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
  int *res = (int *)malloc(sizeof(int) * fmax(nums1Size,nums2Size));//申请一块内存,大小是nums1Size和nums2Size的最大值
  int i,j,k = 0;

  for( i = 0; i < nums1Size; i++) 
  {
    for( j = 0; j < nums2Size; j++) 
    {
      //如果 nums1[i] == nums2[j],那么将此值放入ret数组中,然后清空该位置元素【置-1】
      // 然后跳出本次循环
      if(nums1[i] == nums2[j]) 
      {
        res[k++] = nums1[i];
        nums1[i] = -1;
        nums2[j] = -1;
        break;
      }
    }
  }

  // 返回结果数组以及长度
  *returnSize = k;
  return res;
}

测试结果

  int nums1Size = 4, nums2Size = 2;
  int nums1[nums1Size] = {1,2,2,1};
  int nums2[nums2Size] = {2,2};

算法-两个数组的交集

  int nums1Size = 3, nums2Size = 5;
  int nums1[nums1Size] = {4,9,5};
  int nums2[nums2Size] = {9,4,9,8,4};

算法-两个数组的交集

原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/277160.html

(0)
上一篇 2022年7月26日 20:16
下一篇 2022年7月26日 20:22

相关推荐

发表回复

登录后才能评论