349.给定两个数组,编写一个函数来计算它们的交集。
-
又是一个简单又不会做的题(苦涩),原先想能否用数组作为哈希表来解题,但由于是比较数组中的数字,并没有什么限制,所以没有办法确定数组需要定义多大,做不了。看了别人的题解,用的是C++内置数据结构unordered_set,由于还没学过C++,这题就先搁着吧,日后学习到再回来不上。 -
第二种是官方给的另一种题解,将两个函数用C内置函数qsort进行排序后,利用两个指针去遍历数组,将两个数组中出现的相同的且之前没出现过的数存放到结果数组中,当又一个指针遍历到数组尾部就结束。
int cmp(void* a, void* b) {
return *(int*)a - *(int*)b;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
qsort(nums1, nums1Size, sizeof(int), cmp);
qsort(nums2, nums2Size, sizeof(int), cmp);
*returnSize = 0;
int index1 = 0, index2 = 0;
int* intersection = malloc(sizeof(int) * (nums1Size + nums2Size));
while (index1 < nums1Size && index2 < nums2Size) {
int num1 = nums1[index1], num2 = nums2[index2];
if (num1 == num2) {
if (!(*returnSize) || num1 != intersection[(*returnSize) - 1]) {
intersection[(*returnSize)++] = num1;
}
index1++;
index2++;
} else if (num1 < num2) {
index1++;
} else {
index2++;
}
}
return intersection;
}
作者:LeetCode-Solution
链接:https:
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
注:runoob上对qsort函数的解释:
|