day6
这题主要是来练练set在哈希表中的应用
首先,关于set使用哈希有三种数据结构
set
unordered_set
muti_set
本题选用unordered_set 更快
思路:先将一个数组转换程 set 达到去重的效果,再遍历另一个数组,来查找是否在哈希表中出现,如果出现,就插入到res(我们定义的unordered_set,用来存放结果)。
新学到的点:
1. 定义一个set unorder_set<int> res;
2.学到了三个函数 find(x) 查找 x 是否在set中出现过
3.容器之间的转化 unordered_set<int> num_set(num1.begin() , num1.end());
4. 注意这里 return 的时候 不用加上变量名 不然会报错
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// 遇到的第一个问题:如何定义一个set?
// 第二个问题:set中的函数使用?
// set中的数据是不能重复的,所以想把给的数组,转为set 如何转?
// 本题分为三个步骤 1. 先将一个数组转为哈希的结构 2. 再用另一个数组在哈希结构里查找
// 3. 如果查找到了,就将其插入到新的set内
unordered_set<int> res;
unordered_set<int> nums_set(nums1.begin(),nums1.end()); // 转换操作 1.哈希映射
for(int i = 0; i < nums2.size(); i++) // 2.遍历另一个数组
if( nums_set.find(nums2[i]) != nums_set.end())
res.insert(nums2[i]); // 3.找到就插入
return vector<int>(res.begin(),res.end()); // 不要加变量名
}
};
也可以用数组来解决,方法和上一题差不多,用下标来映射
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
int hash[1005] = {0};
unordered_set<int> res;
//1.做哈希映射
for(int i = 0; i < nums1.size(); i++)
hash[nums1[i]] = 1; // 又是类似桶排序的操作 // 和字母那题的映射方法和处理方法不一样
// 2.遍历另一个数组
for(int i = 0; i < nums2.size(); i++)
if(hash[nums2[i]] == 1)
res.insert(nums2[i]); // 3.插入操作
return vector<int>(res.begin(),res.end());
}
};