• Leetcode:349. 两个数组的交集【题解超详细】


    题目

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

    难度:简单

    题目链接:349.两个数组的交集

    示例 1:

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

    示例 2:

    输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出:[9,4]
    解释:[4,9] 也是可通过的

    提示:

    • 1 <= nums1.length, nums2.length <= 1000
    • 0 <= nums1[i], nums2[i] <= 1000

    思路解析

    根据题目的意思就是求出两个数组的交集,返回两个数组都包含的元素。

    下方代码的方法就是 用两层for循环来比较nums1和nums2两个数组中相同的元素,然后把相同的元素,通过创建一个临时数组,存放与下标与之对应的元素 ( 前提是先把来临时数组需要用到元素初始化为-1 ,原因是方便以后的数组遍历)。

    最后遍历临时数组,把不是-1的元素放到返回数组中。

    代码展示

    1. /**
    2. * Note: The returned array must be malloced, assume caller calls free().
    3. */
    4. int tmp[1001] = {0};//创建临时数组
    5. int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
    6. int * arr = (int*)malloc(sizeof(int)*nums1Size);
    7. int i = 0;
    8. int j = 0;
    9. int x = 0;
    10. //把数组所有元素全部初始化为-1
    11. for(i = 0;i<=1000;i++)
    12. {
    13. tmp[i] = -1;
    14. }
    15. for(i = 0;i
    16. {
    17. for(j = 0;j
    18. {
    19. if(nums1[i] == nums2[j])//把对应的元素放到相应的数组下标
    20. {
    21. x = nums1[i]%1001;
    22. tmp[x] = x;
    23. }
    24. }
    25. }
    26. j = 0;
    27. for(i = 0;i<=1000;i++)
    28. {
    29. if(tmp[i] != -1)
    30. {
    31. arr[j++] = tmp[i];
    32. }
    33. }
    34. *returnSize = j;
    35. return arr;
    36. }

    【详细解析】

    如果只看思路解析的话,那么我们想的是应该怎木写代码呢,先在函数外创建一个临时的数组,然后在函数内部使用malloc使用动态内存分配一个返回数组。

    然后使用一个for循环先把临时数组里面的元素置成 - 1,因为数组存储元素的数字的范围是[ 0,1000]。

    接着用两层for循环进行判断两个数组是否相同的元素(即数组元素的交集),在内层的for循环里面使用一个if语句进行判断,如果找到两个数组元素的交集我们就先把元素放到临时数组(tmp[])相应的位置。

    1. x = nums1[i]%1001;
    2. tmp[x] = x;

    当放到临时数组后,还需要把临时数组中元素不等于-1的元素放到返回数组中。

    1. if(tmp[i] != -1)
    2. {
    3. arr[j++] = tmp[i];
    4. }

     接着就是返回 返回数组的元素的个数 和 返回 返回数组首元素的地址。

    1. *returnSize = j;//返回数组的大小
    2. return arr;//返回数组首元素的地址

  • 相关阅读:
    Spring源码(十三)reflush方法的finishBeanFactoryInitialization方法(一)
    【Apifox】为什么如此受青睐,此篇文章和大家分享
    cmake(14):利用set_property命令设置全局属性
    哈希表— —链式实现
    生产环境中的面试问题,实时链路中的Kafka数据发现某字段值错误,怎么办?...
    Go语言学习笔记——Golang 1.18新特性工作区workspace
    Kimichat使用案例005:用kimichat将srt字幕文件转换成word文档(零代码编程序)
    一篇面向初学者的git使用教程(超级详细)
    Jmeter项目实战
    使用Maxent模型预测适生区
  • 原文地址:https://blog.csdn.net/qq_72505850/article/details/132629396