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.
我的解法很简单,但是开销大:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
sort(nums1.begin(),nums1.end());
nums1.erase(unique(nums1.begin(),nums1.end()),nums1.end());
sort(nums2.begin(),nums2.end());
nums2.erase(unique(nums2.begin(),nums2.end()),nums2.end());
for(int i=0,n=nums1.size();i<n;i++)
for(int j=0,m=nums2.size();j<m;j++)
if(nums1[i]==nums2[j])
res.push_back(nums1[i]);
return res;
}
};
其实就是先去重,再遍历两个数组,相同的就放到res里。
vector去重也是一个很重要的东西,用C++自己的库函数很容易实现:先排序,再unique,unique会返回相邻的相同元素的迭代器,最后使用erase,把
从unique返回的这个位置到end的这一段抹掉就行了。。
大佬们用的是unordered_map,详细的介绍可以参见:http://en.cppreference.com/w/cpp/container/unordered_map