350. 两个数组的交集 II

题目:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/

分析:这道题与349类似,只是要元素可以出现重复,所有考虑使用"multiset";还可以考虑使用“排序+双指针”。

代码1:

C++版本:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
    multiset<int> s1(nums1.begin(), nums1.end());
    multiset<int> s2;
    for (auto& num : nums2) {
        if (s1.find(num) != s1.end()){
            s2.insert(num);
            s1.erase(s1.lower_bound(num));
        }
    }
    return vector<int> (s2.begin(), s2.end());
}

知识点:

1、在multimap和multiset中查找元素:https://blog.csdn.net/jasonLee_lijiaqi/article/details/78596763

2、multiset用法总结:https://blog.csdn.net/sodacoco/article/details/84798621

 代码2:

C++版本:
vector<int> intersect1(vector<int>& nums1, vector<int>& nums2) {
    sort(nums1.begin(), nums1.end());
    sort(nums2.begin(), nums2.end());
    int i = 0, j = 0;
    vector<int> result;
    while (i < nums1.size() && j < nums2.size()) {
        if (nums1[i] == nums2[j]) {
            result.push_back(nums1[i]);
            i++;
            j++;
        }
        else if (nums1[i] < nums2[j]) i++;
        else if (nums1[i] > nums2[j]) j++;
    }
    return result;
}

 

posted @ 2021-10-21 10:53  wltree  阅读(21)  评论(0编辑  收藏  举报