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的空间不够大,导致了如下错误:
引以为戒……