当前位置: 首页 > article >正文

[349. 两个数组的交集](C语言)(两种解法:双指针+排序,哈希)

 

 ✨欢迎来到脑子不好的小菜鸟的文章✨

      🎈创作不易,麻烦点点赞哦🎈

          所属专栏:刷题   

          我的主页:脑子不好的小菜鸟

          文章特点:关键点和步骤讲解放在

          代码相应位置

 前提:

看本文章之前,建议先看看这篇对哈希算法的讲解哦,可能事半功倍哦~

传送门:常见的三种哈希结构(数组,set,map)-CSDN博客

题目链接:

349. 两个数组的交集 - 力扣(LeetCode)

AC代码:

法一:双指针+排序

qsort函数不了解的可看我之前的文章:qsort函数的使用和模拟实现排序-CSDN博客




/*法一*/
/*思路:排序+双指针*/


// int cmp(const void* e1, const void* e2)
// {
//     return *(int*)e1 - *(int*)e2;
// }

// int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
// {
//     int book[1005] = { 0 };
//     //要有一个标记的数组,防止数组中出现重复的数

//     qsort(nums1, nums1Size, sizeof(nums1[0]), cmp);
//     qsort(nums2, nums2Size, sizeof(nums2[0]), cmp);

//     int a = nums1Size < nums2Size ? nums1Size : nums2Size;
//     int* c = (int*)malloc(a * sizeof(nums1[0]));

//     int i = 0, j = 0, h = 0;
//     //i:nums1的下标 j:nums2的下标   h:c的下标
//     while (i < nums1Size && j < nums2Size)
//     {
//         if(nums1[i] == nums2[j])
//         {
//             if (book[nums1[i]] == 0)
//             {
//                 book[nums1[i]] = 1;
//                 c[h] = nums1[i];
//                 h++;
//             }
//             i++;
//             j++;
//         }
//         else if (nums1[i] > nums2[j])
//         {
//             j++;
//         }
//         else
//         {
//             i++;
//         }
//     }
  
//     *returnSize = h;
//     int* b = (int*)malloc(h * sizeof(nums1[0]));
//     for (int i = 0; i < h; i++)
//     {
//         b[i] = c[i];
//     }

//     return b;
// }

 法二:哈希表


/*法二:哈希表*/
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
    int h=0;
    int hash[1001]={0};
    int i=0;
    int max=nums1Size<nums2Size?nums1Size:nums2Size;
    

    for(i=0;i<nums1Size;i++)
    {
        hash[nums1[i]]=1;
    }

    int j=0;
    int* ans=(int*)calloc(max,sizeof(nums1[0]));

    for(i=0;i<nums2Size;i++)
    {
        if(hash[nums2[i]]==1)
            {
                ans[j++]=nums2[i];
                hash[nums2[i]]=0;
                /*!!!!!!!记得置为0,否则最后ans中的数量可能大于max,因为可能有很多个重复出现的元素反复放入ans!!!!!!!!!*/
            }
    }

    *returnSize=j;
    return ans;
}

 最后祝大家题题AC,只盼做个WA梦 ~


http://www.kler.cn/a/227008.html

相关文章:

  • Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用
  • 图论练习1
  • Kotlin-类
  • 异步解耦之RabbitMQ(一)_RabbitMQ 简介
  • Oracle和Mysql数据库
  • 软件行业人才结构分析与个人成长路径探讨
  • 微服务—Docker
  • C++棋类小游戏2
  • 浪漫的通讯录(顺序表篇)
  • 13:Session机制实现用户登录与注销功能-Java Web
  • 【Matplotlib】figure方法之图形的保存
  • 远程手机搭建Termux环境,并通过ssh连接Termux
  • 计算机网络_1.5 计算机网络的性能指标
  • C# 更改系统的屏保设置
  • 编程笔记 html5cssjs 076 Javascript 表达式
  • 深入了解 Ansible:全面掌握自动化 IT 环境的利器
  • Activity的启动流程
  • 项目播报 | 镭目科技与璞华科技正式签约,携手打造智能采购平台
  • STM32--SPI通信协议(2)W25Q64简介
  • ES6-数组的解构赋值