链接: link
题目描述:
题目思路:
可能本题会有其他方法,但是这里我只分享我自己的方法。
1.求两个数组的交集首先我想到的是拿nums1数组中的每个元素去和nums2数组所有元素对比,如果相等就保留下这个值,但是这个过程中会出现保存下来的元素是重复的情况。
2.如果数组是无序的去重会很麻烦,所以这里使用了qsort快速排序函数,对nums1和nums2数组都进行了排序
**注意:**使用malloc动态开辟内存空间,但是为了确保取交集后数组能放下取交集后的元素,这里最好使用两个数组元素个数的最大值,这里我使用的是两个数组元素个数的和。
如何去重?
去重部分代码实现:返回去重后数组元素个数
int dedup(int* nums, int numsSize)
{
int src = 1;
int dst = 0;`在这里插入代码片`
int i = 0;
while (src < numsSize)
{
if (nums[dst] != nums[src])
{
dst++;
nums[dst] = nums[src];
src++;
}
else
{
src++;
}
}
return dst;
}
qsort排序部分:
int cmp_int(const void* p1, const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
整体代码:
int cmp_int(const void* p1,const void* p2)
{
return *(int*)p1-*(int*)p2;
}
int dedup(int* nums,int numsSize)
{
int src = 1;
int dst = 0;
int i = 0;
while(src<numsSize)
{
if(nums[dst]!=nums[src])
{
dst++;
nums[dst]=nums[src];
src++;
}
else
{
src++;
}
}
return dst;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
//每个数组先去重,再进行求交集
int* tmp = (int*)malloc(sizeof(int)*(nums1Size+nums2Size));
if(tmp==NULL)
{
perror("malloc");
return;
}
qsort(nums1,nums1Size,sizeof(int),cmp_int);
qsort(nums2,nums2Size,sizeof(int),cmp_int);
int len1 = dedup(nums1,nums1Size);
int len2 = dedup(nums2,nums2Size);
int i = 0;
int j = 0;
int count = 0;
for(i=0;i<=len1;i++)
{
for(j=0;j<=len2;j++)
{
if(nums1[i]==nums2[j])
{
tmp[count++]=nums2[j];
}
}
}
*returnSize = count;
return tmp;
free(tmp);
tmp = NULL;
}