最简单的暴力解法,使用set容器,set容器的特点是不会有重复的元素,当有重复的元素存进去时
只会保存一个。先把A数组中的元素存入set中,再遍历B数组,查看set中是否有相同的元素
注意迭代器的使用和set数组find()函数的用法
C++语言中的set和map底层就是一个平衡搜索树,插入、查找、删除操作的时间复杂度都是O(logn)
还有一种经典的set和map实现方式-哈希表。插入、查找、删除操作的时间复杂度都是O(1)
但是哈希表有个缺点:存入数据后就会失去数据的顺序性
底层实现为哈希表的方法是: unorder_set\unorder_map
//时间复杂度:O(nlogn)
//空间复杂度:O(n)
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
/*
set<int> record;
for(int i = 0; i < nums1.size(); i++)
record.insert(nums1[i]);
以下是简写:
*/
//O(nlogn)
set<int> record(nums1.begin(), nums1.end());
//O(nlogn)
set<int> resultSet;
for(int i = 0; i < nums2.size(); i++)
if(record.find(nums2[i]) != record.end())
resultSet.insert(nums2[i]);
/*
vector<int> result;
for(set<int>::iterator iter = resultSet.begin(); iter != resultSet.end(); iter++)
result.push_back(*iter);
return result;
以下是简写:
*/
//O(n)
return vector<int>(resultSet.begin(), resultSet.end());
}
};