题目
题解
-
哈希表
短的数组先进哈希表,键为数组元素,值为数组元素出现的次数,长的数组,每找到一个,相应值减一
哈希表考虑用for (int num : nums1) { ++m[num];}遍历数组更为方便
数组长短对于算法的影响if (nums1.size() > nums2.size()) {return intersect(nums2, nums1);} -
排序+双指针
代码
// class Solution {
// public:
// vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
// if (nums1.size() > nums2.size()) {
// return intersect(nums2, nums1);
// }
// vector<int> res;
// unordered_map<int,int> haxi;
// int m=nums1.size();
// int n=nums2.size();
// for(int i=0;i<m;i++){
// if(haxi.find(nums1[i])==haxi.end())
// haxi[nums1[i]]=0;
// else
// haxi[nums1[i]]++;
// }
// for(int i=0;i<n;i++){
// if(haxi.find(nums2[i])!=haxi.end()){
// if(haxi[nums2[i]]>=0){
// haxi[nums2[i]]--;
// res.push_back(nums2[i]);
// }
// }
// }
// return res;
// }
// };
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> res;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int i=0,j=0;
while(i<nums1.size()&&j<nums2.size()){
if(nums1[i]<nums2[j])
i++;
else if(nums1[i]>nums2[j])
j++;
else{
res.push_back(nums1[i]);
i++;
j++;
}
}
return res;
}
};