小编典典

在排序数组中查找未重复的元素

algorithm

资料来源:Microsoft面试问题

给定一个排序的数组,其中每个元素都出现两次,但一次只能出现一次,我们需要找到该元素。

现在,标准的O(n)解决方案是对列表进行XOR,这将返回未重复的元素(因为所有重复的元素都被抵消了)。

如果我们知道数组已排序,是否可以更快地解决此问题?


阅读 347

收藏
2020-07-28

共1个答案

小编典典

是的,您可以使用排序来降低复杂度,方法O(log n)是进行二进制搜索。

由于对数组进行了排序,因此在缺少元素之前,每个值都占据了数组中的点2*k和位置2*k+1(假定基于0的索引)。

所以,你到阵列的中间,说指数h,并检查无论是指数h+1,如果h是偶数,或者h-1如果h是奇数。如果缺少元素稍后出现,则这些位置处的值相等,如果之前出现,则值将不同。重复直到找到丢失的元素。

2020-07-28