使用c++红黑树map存储(有序)。

对于数组1,读取每一位,对应位数value加一。

对于数组2,读取每一位,同时读取该位在map中的状态,如果出现过,则将该位标记为-1。

最后读取所有value为-1的key,存到数组里返回即可。

由于红黑树map有序,我们无需再次对数组排序;如果使用unordered_map(hash),则需要对数组排序后再返回。

本题数据没标明范围,有漏洞,如果标了范围在-21亿到+21亿,可以选择另外开一个map存储结果,或手动去重。

#include <algorithm>
#include <map>
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        map<int,int> m;
        vector<int> v;

        for(int i:nums1) m[i]++;
        for(int i:nums2) if(m[i]>0) m[i]=-1;
        for(auto [i,j]:m) if(m[i]==-1) v.push_back(i);
        return v;
    }
};