- Intersection of Two Arrays II
题目分析:与349的区别是相同元素的出现次数也要相同。可以用哈希表创建保存元素值和出现个数,但是对于C语言来说哈希表很麻烦,所以直接用qsort先对两个数组排序,再使用双指针进行比较。
int cmpfunc(const void * a, const void * b)
{
return (*(int*)a - *(int*)b);
}
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
qsort(nums1, nums1Size, sizeof(int), cmpfunc);
qsort(nums2, nums2Size, sizeof(int), cmpfunc);
*returnSize = 0;
int* result;
if (nums1Size <= nums2Size){
result = (int*)malloc(sizeof(int)*nums1Size);
}
else{
result = (int*)malloc(sizeof(int)*nums2Size);
}
int i = 0, j = 0;
while (i < nums1Size && j < nums2Size){
if (*(nums1 + i) == *(nums2 + j)){
*(result + *returnSize) = *(nums1 + i);
*returnSize = *returnSize + 1;
i++;
j++;
}
else if (*(nums1 + i) < *(nums2 + j)){
i++;
}
else if (*(nums1 + i) > *(nums2 + j)){
j++;
}
}
return result;
}