使用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;
}
};

京公网安备 11010502036488号