思路分析:
这道题可以采用两种方法。
第一种方法:(1)先把两个数组按照升序排序。(2)都从第一个位置开始比较,如果相等的话,就存到vector容器当中。如果不相等的话,就把较小的往后移。
第二种方法:(1)先把两个数组按照升序排序。(2)定义一个map整型到整型的映射。(3)遍历第一个数组,将其对应的哈希值+1.(3)遍历第二个数组,如果其哈希值大于0,就存到vector容器中,并且哈希值-1。
代码实现(双指针):
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
int len1,len2,i=0,j=0,count=0;
vector<int>a;
len1=nums1.size();
len2=nums2.size();
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
while(i<len1&&j<len2)
{
if(nums1[i]==nums2[j])
{
a.push_back(nums1[i]);
i++;
j++;
}
else if(nums1[i]>nums2[j])
j++;
else if(nums1[i]<nums2[j])
i++;
}
return a;
}
};
代码实现(哈希表):
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int>a;
map<int,int>b;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int len1=nums1.size(),len2=nums2.size();
for(int i=0;i<len1;i++)
b[nums1[i]]++;
for(int i=0;i<len2;i++)
{
if(b[nums2[i]]>0)
{a.push_back(nums2[i]);
b[nums2[i]]--;
}
}
return a;
}
};