leetcode 350. Intersection of Two Arrays II
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2, 2]
.
Note:
- Each element in the result should appear as many times as it shows in both arrays.
- The result can be in any order.
Follow up:
- What if the given array is already sorted? How would you optimize your algorithm?
- What if nums1's size is small compared to nums2's size? Which algorithm is better?
- What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?
AC:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
if(nums1Size==0||nums2Size==0)
{
*returnSize=0;
return NULL;
}
int len=0;
int* result=(int *)malloc((nums1Size>nums2Size?nums2Size:nums1Size)*sizeof(int));
for(int i=0;i<nums1Size;i++)
{
for(int j=0;j<nums2Size;j++)
{
if(nums1[i]==nums2[j])
{
result[len]=nums1[i];
len++;
nums2[j]=-1;
break;
}
}
}
*returnSize=len;
return result;
}
tip: 虽然AC,但是有个bug,就是如果数组中有-1的话,就错了。