
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;
unordered_set<int> nums_set(nums1.begin(),nums1.end());
for(auto num:nums2){//遍历nums2
if(nums_set.find(num)!=nums_set.end()){//用find在nums1里去找num的地址遍历一遍,
result_set.insert(num);//在里面的num就插入result里
}
}
return vector<int>(result_set.begin(),result_set.end());
}
};讲之前先说一下这两个点
什么时候用哈希表呢就是,当你遇到要求某个元素是否在出现在一个数组里,这时候我们就可以下意识去想到它。
再简单说一下set和unordered_set的区别,set是有序,并且元素只出现一次,另一个是无序,并且元素只出现一次 在这里用哪个都是可以的因为求得是交集,只要保证这里面的数是出现一次就可以。
简单讲述一下,就是给两个数组nums1,2
设个result_set用来存交集,在设个nums_set,存下nums1的数组内的元素,因为是unordered_set类型的所以自动去重
set<int> nums_set(nums1.begin(),nums1.end());这样的初始化方式也可以说成拷贝吧,容器都可以做到。
下面的循环,利用auto自动转化num的类型
接下来插入进交集中
最后因为返回值类型是vector<int>所以最后再强转一下
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;
int hash[1000+10]={0};//利用数组来做哈希表
for(auto num:nums1){
hash[num]=1;
}
for(auto num:nums2){
if(hash[num]==1){
result_set.insert(num);
}
}
return vector<int>(result_set.begin(),result_set.end());
}
};我们还可以利用数组来做哈希表来解决
讲之前说一下哈希表选择什么来做,数组(当数据较小我们选择),set,map(数据复杂我们选择)
先设个数组hash,让其所有数初始化为0,然后就是和上面一样的遍历这些看看就会了本质没什么区别
有什么写的不妥的可以评论我去改,吼吼吼。