假设我们有两个整数数组A和B,每个数组都有n个元素。
描述一个O(n log n)算法,以确定A的所有元素是否都是 不同
你会怎么做这个问题? 我非常坚持这一点。我知道我们必须做一些排序,这在某种程度上类似于二进制搜索。有任何想法吗?答案 0 :(得分:0)
首先,您对A
和B
进行排序,如果您选择好排序算法,则会在该部分上获得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)