class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> res;
unordered_set<int> nums(nums1.begin(), nums1.end());
for(auto e:nums2) {
if(nums.find(e) != nums.end()) res.insert(e);
}
return vector<int>(res.begin(), res.end());
}
};
时间复杂度为 O(m+n),其中 m 和 n 分别为输入的两个向量的长度。具体分析如下:
将 nums1 向量转换为 unordered_set,时间复杂度为 O(m)。
遍历 nums2 向量,对于每个元素,使用 find 函数查询是否在 nums 中,时间复杂度为 O(1),因为 unordered_set 的查找时间是常数级别的。
如果某个元素在 nums 中,则将其插入到 res 中,时间复杂度为 O(1),因为 unordered_set 的插入时间也是常数级别的。
最后将 res 向量返回,时间复杂度为 O(k),其中 k 表示 res 中不同元素的数量,因为需要遍历一遍 res 向量。
因此,总的时间复杂度为 O(m+n),并且由于本算法只使用了两个 unordered_set 来存储数据,因此空间复杂度也为 O(m+n)。
执行用时:8 ms, 在所有 C++ 提交中击败了40.99%的用户
内存消耗:10.2 MB, 在所有 C++ 提交中击败了38.09%的用户