问题描述:
实现代码:.
#include <iostream>
#include <vector>
#include <map>
using namespace std;
// 时间复杂度: O(nlogn)
// 空间复杂度: O(n)
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
map<int, int> record;//第一个参数表示关键字,
//第二个参数是关键字对应的值
//record作为计数
for (int i = 0; i < nums1.size(); i++)
record[nums1[i]] += 1; //提取nums1[i]的计数器并将其加1
vector<int> resultVector;
for (int i = 0; i < nums2.size(); i++)
if (record[nums2[i]] > 0) { //如果计数record[nums2[i]]>0
resultVector.push_back(nums2[i]);
record[nums2[i]] --; //nums2[i]的计数减1
}
return resultVector;
}
};
int main() {
int nums1[] = { 1, 2, 2, 1 };
vector<int> vec1(nums1, nums1 + sizeof(nums1) / sizeof(int));
int nums2[] = { 2, 2 };
vector<int> vec2(nums2, nums2 + sizeof(nums2) / sizeof(int));
vector<int> res = Solution().intersect(vec1, vec2);
for (int i = 0; i < res.size(); i++)
cout << res[i] << " ";
cout << endl;
return 0;
}
图解:
①将数组num1的元素添加到关联容器map的 record中:
②查找交集
关于map: