350.两个数组的交集II

题目描述:给定两个数组,编写函数来计算它们的交集。

示例1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2]

示例2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

1.排序方法:
class Solution {
public:
    vector<int> q;
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        int length1 = nums1.size();
        int length2 = nums2.size();
        int s1 = 0, s2 = 0;
        while(s1 < length1 && s2 < length2) {
            if(nums1[s1] < nums2[s2]) {
                s1++;
            } else if(nums1[s1] > nums2[s2]) {
                s2++;
            } else {
                q.push_back(nums1[s1]);
                s1++;
                s2++;
            }
        }
        return q;
    }
};

 2.哈希函数

class Solution {
public:
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
        if(nums1.size() > nums2.size()) {//将长度较小的进行映射,减少内存的开销
            return intersect(nums2, nums1);
        }
        vector<int> q;
        unordered_map<int, int> m;
        for(int num : nums1) {//记录相同数的个数
            ++m[num];
        }
        for(int s : nums2) {
            if(m.count(s)) {
                q.push_back(s);//找到相同的元素,存放在新的vector中
                --m[s];//并将个数减少
                if(m[s] == 0) {
                    m.erase(s);
                }
            }
        }
        return q;
    }
};
 
posted @ 2020-07-13 20:20  Captand  阅读(150)  评论(0编辑  收藏  举报