350. Intersection of Two Arrays II
思路:
hash_map存入一个数组的元素并计数,然后再遍历另一个数组如果hash_map存在这个元素,并且还没被减到0,那么就添加进res结果数组中并将hash_map计数减一。
代码:
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int,int> mp;
vector<int> res;
for(auto& num:nums1){
mp[num]++;
}
for(auto& num:nums2){
if(mp.count(num)&&mp[num]!=0) {res.push_back(num);mp[num]--;}
}
return res;
}
};
另一种如果我们排序,通过两个指针来判断两个指针指向的数是否相等,因为已经是升序排序了,所以从第一个元素开始比较,如果相等就加入res,并且两个指针都右移,如果不等,那就让值小的指针右移,因为可能大的数存在相等的。
代码:
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
vector<int> res;
int p1=0,p2=0;
int n1=nums1.size();
int n2=nums2.size();
while(p1<n1&&p2<n2){
if(nums1[p1]==nums2[p2]) {
res.push_back(nums1[p1]);
p1++;
p2++;
}
else if(nums1[p1]>nums2[p2]) p2++;
else if(nums1[p1]<nums2[p2]) p1++;
}
return res;
}
};