給定兩個數字列表A,B。有沒有更好的方法來檢查它們是否等於O(N^2)解決方案。檢查兩個數字列表是否相等
回答
如果你的意思是,這兩個列表包含相同的數字,沒有對於排序,你可以使用以下O(n *log n)
算法:
- 排序以同樣的方式既列表(例如升序)
- 逐項比較產生的列表從頂部開始
步驟(1)需要2 * O(n *log n) = O(n *log n)
時間。第二步以線性O(n)
時間運行。
因此運行上述算法可以在O(n *log n)
時間內解決您的問題。
如果數字是整數,則可以使用具有O(n)時間複雜度的桶分類算法(更精確地說,時間複雜度是O(n + r),其中r是數字範圍),將問題減少到O (n)+ O(n)+ O(n)= O(n)複雜度 –
或'O(n * log(r))'的二進制基數排序,此時'r'是最大可表示值超過實際存在的最大值。它可以做到位,這很好。 –
假設數字在列表上的排序,並且兩個列表具有相同的長度:
bool eq = true;
for (int i = 0; i < list1.length; i++) {
if (list1[i] != list2[i]) {
eq = false;
last;
}
}
首先檢查,如果他們有相同的長度。如果是,你可以把A的數字放在HashSet中。通過B迭代並檢查它是否存在於HashSet中。如果它在那裏,你可以從HashSet中移除。如果最後HashSet是空的,它們是相等的。這是O(n)
實際上,HashSet中不允許有重複項,因此您可以使用帶有鍵的HashMap作爲數字和值作爲計數。算法保持不變。每次在HashMap遞減計數中找到多個B.如果最後HashMap是空的,那麼它們是相等的。這也是O(n)。
謝謝。我也想出了O(n * logn)算法,但我喜歡Urs! –
謝謝。我也喜歡這個 :)。如果你能接受的話,它會有所幫助(再次只在你喜歡它的時候:))我的回答特別是因爲(令人驚訝的)沒有人贊成我的:)。 – user1168577
排序2所列出O(nlogn)
然後在他們兩人同時去看看它們包含了相同的數字爲O(n)
總:O(nlogn)
- 1. 檢查兩個表是否相等
- 2. 檢查兩個位置是否相等
- 3. 檢查兩個「select」是否相等
- 4. 檢查兩個向量是否相等
- 5. 如何檢查列表中的兩個數字是否相同
- 6. 表單驗證檢查兩個字段是否相等
- 7. 檢查兩個數字是否相等的最佳方法
- 8. 檢查兩個字符數組是否相等C
- 9. Ant:檢查兩個數字是否相等
- 10. 檢查兩個列表相等
- 11. Pythonic的方式來檢查是否兩個列表的列表是相等的
- 12. Scheme(檢查列表,數字和符號是否相等)
- 13. 檢查兩個數字是否等於n個有效數字
- 14. 檢查是否在MySQL表中的兩列相等太慢
- 15. 如何在JSP中檢查兩個字符串是否相等?
- 16. 檢查兩個字符串是否相等
- 17. 檢查兩個龐大的Python字典是否相等
- 18. 庫檢查兩個正則表達式是否相等/同構
- 19. 檢查兩個數組的值是否相等
- 20. 如何檢查兩個整數typedefs是否相等?
- 21. 檢查數組中的至少兩個元素是否相等
- 22. 檢查兩個int數組是否相等 - 無論順序
- 23. 檢查兩個數組是否相等 - C
- 24. 檢查兩個std ::函數是否相等
- 25. 如何檢查兩個數據幀是否相等
- 26. 如何檢查兩個數組是否相等?
- 27. 檢查兩個浮點數/雙精度值是否相等
- 28. 檢查兩個二維數組是否相等
- 29. 是否可以檢查兩個數組不相等
- 30. Python的檢查jsons的兩個列表是相等的
定義「相等」。同樣的順序?重複的元素? – SLaks
你的意思是'有沒有更好的方法來檢查它們是否包含相同的數字?'在我的書籍清單中,平等要求數字都是相同的,並且我認爲需要O(n)操作來檢查相同的順序。 –
列表的任何特殊特徵?他們排序了嗎?數字是否有界?另外,您是否允許使用非恆定數量的額外內存? – Jon