检查两个数字列表是否相等

时间:2012-07-04 14:19:40

标签: algorithm

给出两个数字A,B列表。有没有更好的方法来检查它们是否等于O(N ^ 2)解决方案。

4 个答案:

答案 0 :(得分:4)

对2个列表进行排序 O(nlogn)
然后同时检查它们两个并看到它们包含相同的数字 O(n)

总计: O(nlogn)

答案 1 :(得分:1)

如果您的意思是,两个列表都包含相同的数字而不考虑排序,您可以使用以下O( n *log n )算法:

  1. 以相同的方式对两个列表进行排序(例如,升序)
  2. 从顶部
  3. 开始逐项比较结果列表

    步骤(1)需要2 * O( n *log n ) = O( n *log n )次。第二步以线性O(n)时间运行。

    因此,运行上述算法可以在O( n *log n )时间内解决您的问题。

答案 2 :(得分:1)

首先检查它们的长度是否相等。如果是,则可以将A的数字放在HashSet中。迭代B并检查它是否在HashSet中。如果它在那里你可以从HashSet中删除。如果最后HashSet为空,则它们是相等的。这是O(n)

实际上HashSet中不允许重复,因此您可以使用带键的HashMap作为计数的数字和值。算法保持不变。每次在HashMap减量计数中找到多个B。如果最后HashMap为空,那么它们是相等的。这也是O(n)。

答案 3 :(得分:0)

假设数字在列表中排序,并且两个列表具有相同的长度:

bool eq = true;

for (int i = 0; i < list1.length; i++) {
    if (list1[i] != list2[i]) {
        eq = false;
        last;
    }
}