https://leetcode.com/problems/intersection-of-two-arrays/
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().
*/
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
int i = 0, j = 0, k = 0;
int temp = nums1Size < nums2Size ? nums1Size : nums2Size;
int *intersection = (int *)malloc(temp * sizeof(int));
// remove the duplicates
qsort(nums1, nums1Size, sizeof(nums1[0]), cmp);
qsort(nums2, nums2Size, sizeof(nums2[0]), cmp);
//
while(i < nums1Size && j < nums2Size) {
if(nums1[i] > nums2[j]) {
j++;
} else if(nums2[j] > nums1[i]) {
i++;
} else {
if(k == 0 || (k >= 1 && nums1[i] != intersection[k-1] ))
intersection[k++] = nums1[i];
i++;
j++;
}
}// end while
*returnSize = k;
return intersection;
}