前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[349. 两个数组的交集](C语言)(两种解法:双指针+排序,哈希)

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

作者头像
用户11039529
发布2024-03-25 15:30:20
720
发布2024-03-25 15:30:20
举报
文章被收录于专栏:算法学习日常算法学习日常

前提:

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

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

题目链接:

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

AC代码:

法一:双指针+排序

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

代码语言:javascript
复制
/*法一*/
/*思路:排序+双指针*/


// 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;
// }

法二:哈希表

代码语言:javascript
复制
/*法二:哈希表*/
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梦 ~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提:
  • 题目链接:
  • AC代码:
    • 法一:双指针+排序
      • 法二:哈希表
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档