Time: O(n)O(n)O(n)
Space: O(n)O(n)O(n)
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
unordered_map<int,int> c1,c2;
for (auto n : nums1) {
if (c1.find(n)==c1.end()) c1[n]=1;
else c1[n]=c1[n]+1;
}
for (auto n : nums2) {
if (c2.find(n)==c2.end()) c2[n]=1;
else c2[n]=c2[n]+1;
}
vector<int> res;
for (auto v : c1)
if (c2.find(v.first) != c2.end())
for (int i=0; i<min(v.second,c2[v.first]); ++i)
res.push_back(v.first);
return res;
}
};
本文介绍了一种求两个整数数组交集的算法实现。该算法首先使用两个哈希表分别记录两个输入数组中各元素出现的频次,然后遍历第一个哈希表并检查这些元素是否同时存在于第二个哈希表中。对于存在的元素,将其加入结果数组,并确保加入的次数不超过两个哈希表中该元素出现次数的最小值。此算法的时间复杂度和空间复杂度均为O(n)。
946

被折叠的 条评论
为什么被折叠?



