描述一个O(n log n)算法,以确定A的所有元素是否不同

时间:2013-10-04 08:57:25

标签: arrays algorithm big-o time-complexity

假设我们有两个整数数组A和B,每个数组都有n个元素。

描述一个O(n log n)算法,以确定A的所有元素是否都是 不同

你会怎么做这个问题? 我非常坚持这一点。我知道我们必须做一些排序,这在某种程度上类似于二进制搜索。有任何想法吗?

2 个答案:

答案 0 :(得分:0)

首先,您对AB进行排序,如果您选择好排序算法,则会在该部分上获得O(n log(n))的复杂性。

然后,使用两个数组都已排序的事实,将A的每个元素与B的每个元素进行比较。以下算法i[1, n]中值为A的索引,j [1, n]B值为i = 1 j = 1 while i <= N and j <= N do if (A[i] == B[j]) return false; else if (A[i] < B[j]) i += 1 else // A[i] > B[j] j += 1 end return true; 的算法

{{1}}

该部分具有O(n)复杂度,因此总体复杂度为O(n log(n))。

答案 1 :(得分:0)

我想你的意思是来自B的A diif的所有元素。在这种情况下:

使用MergeSort - 排序A(O(nlogn) 使用Merge SOrt对B(Onlogn)进行排序

private bool CheckIfEqual()     ///O(n)
{
for (int i=0;i<A.Count;i++)  //A.count=B.Count otherwise there are for sure not Equal
{
         if (a[i]!=b[i]
       return false
}
return true;
}

所以你有O(nlogn)+ O(nlogn)+ O(n)= O(nlogn)