力扣349. 两个数组的交集(哈希)
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
哈希
思路:
首先使用两个哈希分别存储两个数组中的元素,然后遍历较小的哈希,判断其中的每个元素是否在另一个哈希中,如果元素也在另一个哈希中,则将该元素添加到返回值。该方法的时间复杂度可以降低到 O(m+n)。
复杂度分析:
- 时间复杂度: O(m+n)
- 空间复杂度:O(m+n)
//
// main.cpp
// 349intersection
//
// Created by MXQ on 2020/11/2.
//
#include <iostream>
#include<vector>
#include "map"
using namespace std;
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int>result;
map<int,int>mp1;
map<int,int>mp2;
//用两个哈希存两个数组
for (int i=0; i<nums1.size(); i++) {
mp1[nums1[i]]++;
}
for (int i=0; i<nums2.size(); i++) {
mp2[nums2[i]]++;
}
//遍历小的哈希
if (mp1.size()<mp2.size()) {
for (map<int,int>::iterator it=mp1.begin(); it!=mp1.end(); it++) {
if(mp2[it->first]!=0)result.push_back(it->first);
}
}
else{
for (map<int,int>::iterator it=mp2.begin(); it!=mp2.end(); it++) {
if(mp1[it->first]!=0)result.push_back(it->first);
}
}
return result;
}
};
int main(int argc, const char * argv[]) {
// insert code here...
Solution s;
vector<int>nums1={4,9,5};
vector<int>nums2={};
auto result =s.intersection(nums1, nums2);
for (int i=0; i<result.size(); i++) {
cout<<result[i]<<" ";
}
cout<<endl;
std::cout << "Hello, World!\n";
return 0;
}