给定两个数字列表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