NC313 两个数组的交集
new
简单 通过率:29.64% 时间限制:1秒 空间限制:256M
知识点二分哈希排序双指针
给定两个整数数组分别为1nums1, 2nums2,找到它们的公共元素并按返回。
数据范围:
1≤1.ℎ,2.ℎ≤10001≤nums1.length,nums2.length≤1000
1≤1[],2[]≤10001≤nums1[i],nums2[i]≤1000
思路:
法一:用两个set先对两个数组去重,然后对其中一个set进行遍历,每个元素去另一个set里面找。
法二:对两个数组从小到大排序,然后两个指针分别指向两个数组头部,依次比较,注意去重。
法三:本题数字变化比较小,因此可以用一个bool类型数组,下标表示以下标为元素是否出现在nums1中。然后在nums2中找是否出现过即可,注意去重的方法可以是第一次找到后改为false。
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums1 int整型vector
* @param nums2 int整型vector
* @return int整型vector
*/
vector intersection(vector& nums1, vector& nums2) {
// write code here
// sort(nums1.begin(),nums1.end());
// sort(nums2.begin(),nums2.end());
// int r1=nums1.size(),r2=nums2.size();
// int l1=0,l2=0;
// vectorret;
// while(l1nums2[l2])
// {
// l2++;
// }
// else {
// //判断是否重复
// if(ret.size()==0||ret.back()!=nums1[l1])
// ret.push_back(nums1[l1]);
// l1++,l2++;
// }
// }
// return ret;
// sethash;
// sethash1;
// for(auto e:nums1)
// {
// hash.insert(e);
// }
// for(auto e:nums2)
// {
// hash1.insert(e);
// }
// vectorret;
// for(auto e:hash1)
// {
// if(hash.count(e))
// {
// ret.push_back(e);
// }
// }
// return ret;
vectorhash(1001);
for(auto e:nums1)
{
hash[e]=true;
}
vectorret;
for(auto e:nums2)
{
if(hash[e])
{
hash[e]=false;
ret.push_back(e);
}
}
return ret;
}
};