Lintcode 547. 两数组的交集
题目描述:给出两个数组,写出一个方法求出它们的交集。
- 结果中的每个元素必须是唯一的。
- 结果需要为升序。
这道题并不难,看是否能用多种方法实现。这里用merge的方法进行了实现。
这道题也可以使用hashset的方法实现(先将一个数组存到set里面,然后遍历另一个数组看哪个元素在set里面,就可以找到交集),也可以使用二分法实现(先对长度小的那个数组进行排序,然后遍历另一个数组,对所遍历的每个元素在排好序的那个数组中使用二分查找看是否存在)。这两种方法之后找时间实现一下。
class Solution {
public:
/**
* @param nums1: an integer array
* @param nums2: an integer array
* @return: an integer array
*/
vector<int> intersection(vector<int> &nums1, vector<int> &nums2) {
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int i = 0, j = 0, index = 0;
vector<int> result;
while (i < nums1.size() && j < nums2.size()) {
if (nums1[i] == nums2[j]) {
if (0 == index || result[index - 1] != nums1[i]) {
result.push_back(nums1[i]);
index++;
}
i++;
j++;
} else if (nums1[i] < nums2[j]) {
i++;
} else {
j++;
}
}
return result;
}
};