您的位置:首页 > 其它

leetcode-Intersection of Two Arrays II-350

2016-07-19 21:49 567 查看
求模板类的交集,这次是真正的交集,不删除重复元素

原先想把两个模板类的元素放进multiset中,然后用set_intersetion求交集,但是OUTPUT LIMIT EXCEED,可能是输出的容器容量小的原因(猜测)

所以只能用笨办法

/*
1,1,2,3,4,4 这题要注意的是这种情况
1,4,4,4
*/
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
// sort(nums1.begin(), nums1.end());
// sort(nums2.begin(), nums2.end());
// vector<int> ans(100000);   //容量小了?
// vector<int>::iterator it;
// it=set_intersection(nums1.begin(), nums1.end(), nums2.begin(), nums2.end(), ans.begin());
// return ans;
multiset<int> s1(nums1.begin(), nums1.end()), s2(nums2.begin(), nums2.end());
vector<int> ans;
multiset<int>::iterator it1=s1.begin(), it2=s1.begin(), it=s2.begin();
while(it!=s2.end()){
if(s1.count(*it)){
int mi=min(s1.count(*it),  s2.count(*it));
ans.insert(ans.begin(), mi, *it);
it=s2.upper_bound(*it);
}
else{
it++;
}
}
return ans;
}
};

刚才看到一位网友的方法,简洁有效,http://www.cnblogs.com/grandyang/p/5533305.html ,当时怎么没想到一边比较一边删除,且向这种对不好用数组计数的记得用map

class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int, int> m;
vector<int> res;
for (auto a : nums1) ++m[a];
for (auto a : nums2) {
if (m[a]-- > 0) res.push_back(a);
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode