在log n时间从大型排序数组中查找所有唯一元素?

时间:2014-06-19 08:25:14

标签: algorithm time-complexity

我有一个非常大的排序数组。如何计算或打印数组的所有唯一元素?

假设我的数组是[2,3,3,3,4,6,6,7] 那么输出应该是2,3,4,6,7

我知道在n(复杂)时间内这样做。但是面试官让我在日志时间里这样做? 有可能吗?

2 个答案:

答案 0 :(得分:6)

这是一个需要O(logn*k)的算法,其中k是唯一元素: -

set uniQ
int ind = 0;

do {

 uniQ.add(arr[i]);
 ind = BinSearchGreater(arr,arr[ind],ind+1);
 if(ind >= arr.length)
   break;

} while(true);


BinSearchGreater(arr,key,start_ind) : returns index of first element greater than key in subarray starting at start_ind 

时间复杂度: - 请注意,当没有唯一元素很小时,此算法才有用。 这是渐近O(n*logn),如果所有都是唯一的,那么比线性更差。

答案 1 :(得分:0)

我想知道他(采访者)如何计算数组[1,2,3,4,5]中的每个独特元素,而不至少选择每个元素。在这种情况下,您必须选择每个元素来计算每个元素,这将在O(n)中完成。在我看来,如果对给定数组没有其他要求,则无法获得O(log n)的复杂性。