這題是「兩個陣列的交集」問題的第二版,多了乙個「輸出結果中每個元素出現的次數,應與元素在兩個陣列**現次數的最小值一致。」這個要求。
但仍舊可以用雜湊法來做。對其中陣列建立雜湊表,其中鍵為元素值,值為元素頻率。遍歷另乙個陣列的元素,每在雜湊表中找到相同元素,那麼就把其對應頻率減1並把陣列當前元素放入答案陣列。若發現頻率已經為0,則不再放入答案陣列。
這樣子,時間複雜度為o(m|n),空間複雜度為o(n|m)。若兩陣列長度差異比較大,那麼就需要在兩個複雜度中做取捨,是要空間優化還是時間優化。
在第一版中,沒有那個要求的限制,還可以使用二分查詢。思路是對其中乙個陣列排序,遍歷另乙個陣列,搜尋有序陣列的時候就用二分查詢。找到的結果放入集合中。這個方法並不適用於第二版。而且說實話實現繁瑣且效果一般。
最簡單的辦法,就是排序兩個陣列,用雙指標法。時間複雜度為o(nlogn+mlogm)。這在演算法導論中是很經典的例子。實現**如下。
classsolution
else
if (nums1[i]>nums2[j])
else
}return
ans;
}};
leetcode 350兩個陣列的交集
1.題目描述 給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2,2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 4,9 說明 輸出結果中每個元素出現的次數,應與元素在兩個陣列 現的次數一致。我們可以...
leetcode350 兩個陣列的交集
還是用了暴力演算法,因為別的寫不出來,效率極低,nnd,貼 class solution for int k 0 k n k return nice 之後是雜湊表的做法,首先找到乙個長度較小的陣列,進行遍歷,並將其中的元素放入雜湊表,並記錄個數。之後就遍歷第二個陣列,每遇到乙個雜湊表中存在的數,就將...
Leetcode 350 兩個陣列的交集 II
給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2,2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 4,9 說明 輸出結果中每個元素出現的次數,應與元素在兩個陣列 現的次數一致。我們可以不考慮輸出結果...