杀鸡焉用牛刀 发表于 2022-9-2 03:18:11

算法-两个数组的交集

01、题目分析

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

输入: nums1 = , nums2 =
输出: 示例2

输入:nums1 = , nums2 =
输出:题解分析

题目函数返回值是int*,也就是返回一个数组,首先创建所需返回的数组ret,大小是fmax(nums1Size,nums2Size),然后定义两个指针i,j,分别指向nums1,nums2,k记录ret中元素个数。
https://img2022.cnblogs.com/blog/2376156/202207/2376156-20220726174632427-1182998669.png
然后进行遍历,将nums1中的每一个元素与nums2作比较,当nums1 == nums2时候,将相等的值放入ret,然后k++,并将nums1和nums2分别置为-1,避免重复计算。
https://img2022.cnblogs.com/blog/2376156/202207/2376156-20220726174852023-1801869586.png
题解

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 == nums2,那么将此值放入ret数组中,然后清空该位置元素【置-1】
      // 然后跳出本次循环
      if(nums1 == nums2)
      {
      res = nums1;
      nums1 = -1;
      nums2 = -1;
      break;
      }
    }
}

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

int nums1Size = 4, nums2Size = 2;
int nums1 = {1,2,2,1};
int nums2 = {2,2};https://img2022.cnblogs.com/blog/2376156/202207/2376156-20220726171708149-2103860510.png
int nums1Size = 3, nums2Size = 5;
int nums1 = {4,9,5};
int nums2 = {9,4,9,8,4};https://img2022.cnblogs.com/blog/2376156/202207/2376156-20220726172012873-1139737051.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 算法-两个数组的交集