广东省建设注册中心网站,网线制作考核标准,做网站必须要数据库么,即墨网站优化给定两个数组 nums1 和 nums2 #xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源#xff1a;力扣#xff08;LeetCode#xff09; 链接#xff1a;https://leetcode.cn/problems/intersection-of-two-arrays
说… 给定两个数组 nums1 和 nums2 返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 来源力扣LeetCode 链接https://leetcode.cn/problems/intersection-of-two-arrays
说明 输出结果中的每个元素一定是唯一的。 我们可以不考虑输出结果的顺序。
思路 这道题目主要要学会使用一种哈希数据结构unordered_set这个数据结构可以解决很多类似的问题。 注意题目特意说明输出结果中的每个元素一定是唯一的也就是说输出的结果的去重的 同时可以不考虑输出结果的顺序 这道题用暴力的解法时间复杂度是O(n^2)那来看看使用哈希法进一步优化。 但是要注意使用数组来做哈希的题目是因为题目都限制了数值的大小。
而这道题目没有限制数值的大小就无法使用数组来做哈希表了。
而且如果哈希值比较少、特别分散、跨度非常大使用数组就造成空间的极大浪费。
此时就要使用另一种结构体了set 关于setC 给提供了如下三种可用的数据结构
std::setstd::multisetstd::unordered_set
std::set和std::multiset底层实现都是红黑树std::unordered_set的底层实现是哈希表 使用unordered_set 读写效率是最高的并不需要对数据进行排序而且还不要让数据重复所以选择unordered_set。
思路如图所示 当然本题也有数组法一样放在下面。
C代码如下
class Solution {
public:vectorint intersection(vectorint nums1, vectorint nums2) {//set法// unordered_setint result_set;// unordered_setint nums_set(nums1.begin(),nums1.end());// for(int num : nums2)// {// if(nums_set.find(num) ! nums_set.end())// {// result_set.insert(num);// }// }// return vectorint(result_set.begin(),result_set.end());//数组法unordered_setint result_set;int hash[1005] {0};for(int num : nums1){hash[num] 1;}for(int num : nums2){if(hash[num] 1){result_set.insert(num);}}return vectorint(result_set.begin(),result_set.end());}
};