350. 两个数组的交集 II
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
int len1 = nums1.size();
int len2 = nums2.size();
if(len1 == 0 || len2 == 0) return vector<int>();
vector<int> res;
unordered_map<int, int> mp1;
unordered_map<int, int> mp2;
for(auto& val : nums1) {
mp1[val]++;
}
for(auto& val : nums2) {
mp2[val]++;
}
for(auto& val: mp1) {
int num = min(val.second, mp2[val.first]);
if(num) {
res.insert(res.end(), num, val.first);
}
}
return res;
}
};
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
sort(begin(nums1), end(nums1));
sort(begin(nums2), end(nums2));
int i = 0, j = 0, k = 0;
while (i < nums1.size() && j < nums2.size()) {
if (nums1[i] < nums2[j]) {
++i;
} else if (nums1[i] > nums2[j]) {
++j;
} else {
nums1[k++] = nums1[i++];
++j;
}
}
return vector<int>(begin(nums1), begin(nums1) + k);
}
};