lc 349. 两个数组的交集


 void* cmp(const void*a,const void* b) 
 {
     return *(int*)a - *(int*)b;
 }
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
   int *sum = (int*)malloc(1000*sizeof(int));
   int i,j;
   int temp = -1;
   int t = 0;
   int *end;
   int * res;
   qsort(nums1,nums1Size,sizeof(int),cmp);
   qsort(nums2,nums2Size,sizeof(int),cmp);
   for(i=0;i<nums1Size;i++) {
       if (nums1[i] == temp)
           continue;
        temp = nums1[i];

       for(j=0;j<nums2Size;j++) {
           if (nums2[j] == nums1[i]) {
               sum[t] = nums1[i];
               t += 1;
               break;
           }
       }
   }
   end = (int*)malloc(sizeof(int)*t);
   res = memcpy(end,sum,t*sizeof(int));
  *returnSize =t;
   return end;
}

用了最简单的方法做的;太久不写C了,一开始还不理解*returnSize的作用,没有对它赋值,导致运行的有问题;

memcpy那里一开始我使用的是strncpy,这是不对的;strncpy只用于字符型数组的拷贝,其他类型还是要要用memcpy,而且注意最后一个参数,表示的是字节数(例如用int ,需要*4)

还有一种哈希散列的写法:

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
    int s[1001] = {0};   
    int i;
    for (i=0;i<nums1Size;i++) {
        s[nums1[i]] = 1;
    }
    for(i=0;i<nums2Size;i++) {
        if (s[nums2[i]] == 1)
            s[nums2[i]] = 2;
    }
    int *result = (int*)malloc(sizeof(int)*1001);
    *returnSize = 0;
    for(i=0;i<1001;i++) {
        if (s[i] == 2) 
        result[(*returnSize)++] = i;
    }
    return result;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值