Algorithm 在logn时间内从大排序数组中查找所有唯一元素?

Algorithm 在logn时间内从大排序数组中查找所有唯一元素?,algorithm,time-complexity,Algorithm,Time Complexity,我有一个非常大的排序数组。如何计算或打印数组的所有唯一元素 假设我的数组是[2,3,3,4,6,6,7] 那么输出应该是2,3,4,6,7 我知道在n(复杂度)时间内完成它。但面试官让我在登录n时间内完成这项工作?? 有可能吗?我想知道他(面试官)如何计算数组[1,2,3,4,5]中的每个唯一元素,而不必至少选择每个元素。在这种情况下,您必须选取每个元素来计算每个元素,这将在O(n)中完成。在我看来,如果给定数组没有其他要求,就不可能得到O(logn)的复杂度。这里有一个算法需要O(logn*k

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

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

我知道在n(复杂度)时间内完成它。但面试官让我在登录n时间内完成这项工作??
有可能吗?

我想知道他(面试官)如何计算数组[1,2,3,4,5]中的每个唯一元素,而不必至少选择每个元素。在这种情况下,您必须选取每个元素来计算每个元素,这将在O(n)中完成。在我看来,如果给定数组没有其他要求,就不可能得到O(logn)的复杂度。

这里有一个算法需要
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)
如果所有元素都是唯一的,那么比线性更糟糕。

因为打印元素是O(n)复杂度,所以不应该是这样,除非您只有预定义数量的不同元素(假设数组中有整数1到10)。面试官不要求使用(logn)数量的操作来执行任务。他要求复杂性为(logn),这意味着操作的数量与(logn)成正比。e、 g.对于o(n)算法,如果100个元素需要100000次运算,那么200个元素需要200000次运算。对于o(logn)算法,如果100个元素需要100000次运算,那么200个元素需要100150次运算,等等(忽略实际数字。它们只是指示性的)数组是排序的,所以你不需要查看每个元素。你必须至少读取整个数组,所以下限是o(n)@perreal,你必须查看每个元素,例如,这个案例(2,5,7100)你如何判断?我认为可以在
M log N
中完成,其中
M
是结果的大小。您可以通过运行多个二进制搜索来实现这一点。@PhamTrung,这是所有uniq元素的列表,因此即使打印也是O(n)。如果你有log(n)独特的元素呢?我的面试官对这个解决方案非常满意,有一次我被问到同样的问题。