欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

leetcode 349. Intersection of Two Arrays(C语言)10

程序员文章站 2022-07-15 10:46:13
...

贴原题:

Given two arrays, write a function to compute their intersection.

Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].

Note: Each element in the result must be unique. The result can be in
any order.

解析:
  这道题的题意也很明确,就是要找出两个数组的交集,并且求出的交集里不能有相同的数。
  我依旧是采用了快速排序,这样就可以很方便地减少重复数的扫描。但是如果数组中没有重复数的话,依旧要快速排序,反而会增加运算次数。凡事有利弊吧。

贴代码:

/**
 * Return an array of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
void my_qsort(int* nums, int l, int r)
{
    if(l<r)
    {
        int i=l+1;//左端点,从基准值的下一个开始比较
        int j=r;//右端点
        while(i<j)
        {
            if(*(nums+i)>*(nums+l))//若比关键值大,则把该值放到右端点(交换该值与右端点值)
            {
                int temp=*(nums+j);
                *(nums+j)=*(nums+i);
                *(nums+i)=temp;
                j--;//右端点右移
            }
            else//否则就选择下一个继续比较
            {
                i++;
            }
        }
        if(*(nums+i)>=*(nums+l))
        {
            i--;
        }
        int temp=*(nums+i);
        *(nums+i)=*(nums+l);
        *(nums+l)=temp;
        my_qsort(nums, l, i-1);//递归调用
        my_qsort(nums, i+1, r);
    }
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
    int *reNum=(int *)malloc((nums1Size<nums2Size?nums1Size:nums2Size)*sizeof(int));
    my_qsort(nums1, 0, nums1Size-1);
    my_qsort(nums2, 0, nums2Size-1);
    int k=0;
    for(int i=0; i<nums1Size; i++)
    {
        if(i<nums1Size-1 && *(nums1+i)<*(nums1+i+1) || i==nums1Size-1)
        {
            for(int j=0; j<nums2Size; j++)
            {
                if(j<nums2Size-1 && *(nums2+j)<*(nums2+j+1) || j==nums2Size-1)
                {
                    if(*(nums1+i)==*(nums2+j))
                    {
                        *(reNum+k)=*(nums1+i);
                        k++;
                        break;
                    }
                }
            }
        }
    }
    *returnSize=k;
    return reNum;
}

我的出错点:

int *reNum=(int *)malloc((nums1Size<nums2Size?nums1Size:nums2Size)*sizeof(int));

  第一次提交的时候在这个地方我malloc的空间不够大,导致了如下错误:
leetcode 349. Intersection of Two Arrays(C语言)10
  引以为戒……