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 =
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;
}
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;
}
相关文章推荐
- leetcode——Intersection of Two Arrays II
- leetcode 350 Intersection of Two Arrays II C++
- [easy]【leetcode】【java】 Intersection of Two Arrays II 两个数组的交集
- [Leetcode]Intersection of Two Arrays II
- LeetCode:Intersection of Two Arrays II
- leetcode_350 Intersection of Two Arrays II
- [python][leetcode]Intersection of Two Arrays II
- leetcode Intersection of Two Arrays II
- 【leetcode76】Intersection of Two Arrays II
- LeetCode-350 Intersection of Two Arrays II
- 【leetcode76】Intersection of Two Arrays II
- [LeetCode][Python]Intersection of Two Arrays II
- Leetcode_350_Intersection of Two Arrays II
- (LeetCode)Intersection of Two Arrays II --- 求交集,不去重
- LeetCode--No.350--Intersection of Two Arrays II
- leetcode-Intersection of Two Arrays II-350
- leetcode_c++:哈希:Intersection of Two Arrays II(350)
- 【leetcode】Intersection of Two Arrays II
- 【leetcode76】Intersection of Two Arrays II
- 【leetcode76】Intersection of Two Arrays II