您的位置:首页 > 其它

LeetCode: Intersection of Two Arrays II

2016-08-10 23:50 197 查看
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.
算法:先排序,然后依次比较

代码:
void qSort(int* nums, int left, int right)
{
if (left >= right) return;

int l = left;
int r = right;

int pivot = nums[l];

while(l < r)
{
while (l < r && nums[r] >= pivot) { r--;}
if (r > l) nums[l++] = nums[r];

while(l < r && nums[l] < pivot){ l++; }

if (l < r) nums[r--] = nums[l];
}
nums[l] = pivot;

qSort(nums, left, l-1);
qSort(nums, r+1, right);

}
/**
* 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) {

qSort(nums1, 0, nums1Size - 1);
qSort(nums2, 0, nums2Size - 1);

int count = 0;
int* res = NULL;
if (nums1Size < nums2Size) {
res = (int*)malloc(nums1Size * sizeof(int));
}
else {
res = (int*)malloc(nums1Size * sizeof(int));
}
int i = 0, j = 0;
while(i < nums1Size && j < nums2Size) {
while(i < nums1Size && nums1[i] < nums2[j]) {i++;}
if (i >= nums1Size) break;

while(j < nums2Size && nums2[j] < nums1[i]) {j++;}
if (j >= nums2Size) break;

if (nums1[i] == nums2[j]) {
res[count++] = nums1[i];
i++;
j++;
}

}

int *result = (int*)malloc(count * sizeof(int));
for (i = 0; i < count; ++i){
result[i] = res[i];
}

*returnSize = count;
return result;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息