利用unordered_map特性求交集
阿新 • • 發佈:2019-01-09
unordered_map 是關聯容器,含有帶唯一鍵的鍵-值 pair 。搜尋、插入和元素移除擁有平均常數時間複雜度。
元素在內部不以任何特定順序排序,而是組織進桶中。元素放進哪個桶完全依賴於其鍵的雜湊。這允許對單獨元素的快速訪問,因為一旦計算雜湊,則它準確指代元素所放進的桶。
讓我們看下原題:
給定兩個陣列,編寫一個函式來計算它們的交集。
Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
注意:
結果中的每個元素應該出現在兩個陣列中顯示的次數。
結果可以是任何順序。
優化:
如果給定的陣列已經排序怎麼辦? 你會如何優化你的演算法?
如果nums1的尺寸與nums2的尺寸相比較小怎麼辦? 哪種演算法更好?
如果nums2的元素儲存在磁碟上,並且記憶體有限,以致您無法一次將所有元素載入到記憶體中,該怎麼辦?
程式碼分析:
class Solution { public: vector<int> intersect(vector<int>& a, vector<int>& b) { unordered_map<int, int> ctr; for (int i : a) ctr[i]++; vector<int> out; for (int i : b) if (ctr[i]-- > 0) out.push_back(i); return out; } };