Вначале я использовал два unordered_map:
class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> res; std::unordered_map<int, int> mp1, mp2; for (int n1 : nums1) { mp1[n1]++; } for (int n2 : nums2) { mp2[n2]++; } for (auto element : mp1){ if (mp2.count(element.first)) res.push_back(element.first); } return res; } };
Затем я упростил свой код, просто используя один контейнер unordered_map:
vector<int> res; std::unordered_map<int, int> mp1, mp2; for (int n1 : nums1) { mp1[n1]++; } for (auto elem : nums2){ if (mp1.count(elem)) { res.push_back(elem); mp1.erase(elem); } } return res;
У меня есть фантастическая страсть к использованию unordered_map без всякой причины ... Но рекомендуется использовать карту, когда размер ввода довольно мал, что даст вам log(n)
время с точки зрения поиска, удаления и вставки. Когда вы рассматриваете возможность использования unordered_map
, это дает вам O(1)
время с точки зрения поиска, удаления и инертности; однако у него все еще есть константа k
, которая увеличивает сложность. Это не означает экономии средств, когда у вас есть небольшой набор входных данных в контейнере unordered_map
.