这是一道面试题。
我得到了一个由范围在[1,n]
内的n+1
个整数组成的数组,该数组具有k (k≥1)
个重复元素,每个重复元素可以出现多次。任务是以最佳时间和空间复杂度找到出现多次的数组元素。
经过长时间的思考,我自豪地提出了一个时间复杂度为O(nlogn)
、空间复杂度为O(1)
的解决方案。我的想法是将范围[1,n-1]
分成两个部分,并确定哪个部分包含更多来自输入数组的元素(我使用了鸽笼原理)。算法继续递归执行,直到达到区间[X,X]
,其中X
出现两次,这是一个重复元素。
面试官很满意,但他告诉我存在一种具有恒定空间复杂度的O(n)
解决方案。他慷慨地提供了几个提示(与置换有关?),但我不知道如何想出这样的解决方案。假设他没有说谎,有没有人能提供指导方针?我搜索了SO,找到了一些(更简单的)变体问题,但没有找到这个具体的问题。谢谢。
编辑:为了让事情变得更加复杂,面试官提到输入数组不应被修改。
O(n)
的空间。 - Aurel BílýO(1)
空间了。 - גלעד ברקן