1、建两个哈希表,分别存个数
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
map<int, int> m1;
for (int num1 : nums1) {
if (m1.find(num1) == m1.end()) {
m1.insert(make_pair(num1, 1));
}
else {
m1[num1]++;
}
}
map<int, int> m2;
for (int num2 : nums2) {
if (m2.find(num2) == m2.end()) {
m2.insert(make_pair(num2, 1));
}
else {
m2[num2]++;
}
}
vector<int> ans;
for (pair<int, int> p : m1) {
if (m2.find(p.first) != m2.end()) {
int times = min(m2[p.first], p.second);
for (int i = 0; i < times; i++) {
ans.push_back(p.first);
}
}
}
return ans;
}
2、第二个数组利用第一个哈希表
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
map<int, int> m1;
for (int num1 : nums1) {
if (m1.find(num1) == m1.end()) {
m1.insert(make_pair(num1, 1));
}
else {
m1[num1]++;
}
}
vector<int> ans;
for (int num : nums2) {
if (m1.find(num) != m1.end()) {
if (m1[num] > 0) {
m1[num]--;
ans.push_back(num);
}
}
}
return ans;
}
3、若已排序,用两个指针,分别向前
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int i = 0;
int j = 0;
int len1 = nums1.size();
int len2 = nums2.size();
vector<int> ans;
while (i < len1 && j < len2)
if (nums1[i] == nums2[j]) {
ans.push_back(nums1[i]);
i++;
j++;
}
else if (nums1[i] < nums2[j]) {
i++;
}
else {
j++;
}
return ans;
}