题目(leecode T349):
给定两个数组 nums1
和 nums2
,返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
方法:本题最佳的数据结构是C++中的unordered_set,因为本题的要求中说明了每个元素都是唯一的并且不考虑输出的顺序,而unordered_set这个数据结构就能很好的满足这个去重并且无序的要求,我们可以把nums1的数组转换成unorder_set的结构然后遍历nums2中的元素,查找nums2中的元素是否在nums1中出现,如果出现,就把他加入结果集中。
哈希结构很适合用于判断某个元素是否在其中的情况,遇到这种题并且输出结构无序且不重复就可以使用unorder_set
题解:
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set; //创建保存结果的unordered_set可以去重
unordered_set<int> nums_set(nums1.begin(), nums1.end());//将nums1转换为unordered_set
for(int num: nums2){ //遍历nums2中的元素
if(nums_set.find(num) != nums_set.end()){ //查看nums2中的元素是否在nums1中出现过
result_set.insert(num); //如果出现就把他加入到结果集中
}
}
return vector<int>(result_set.begin(), result_set.end()); //将结果集转换为vector类型
}
};