我想创建一个分而治之的算法(O(nlgn)运行时)来确定数组中是否存在k次数。对这个问题的一个限制是只在数组的对象上定义了相等/不等式比较方法(即不能使用<,>)。
所以我尝试了很多方法,包括将数组分成相等大小的k个(大约)。该方法类似于查找数组中的大多数项,但是在大多数情况下,当您拆分数组时,您知道如果存在这样的项,则一半必须具有多数项。是否可以提供任何指示或提示以使我朝着正确的方向前进?
编辑:为了清理一点,我想知道通过将数组分成两半并使用递归解决方案找到大多数项的问题是否可以扩展到k可能是n / 4或n / 5的其他情况等也许我应该用n / k来表达这个问题。
答案 0 :(得分:1)
这是不可能的。作为为什么这是不可能的简单示例,考虑具有长度为n的数组的输入,所有元素都是不同的,并且k = 2。确保没有元素出现两次的唯一方法是将每个元素与每个其他元素进行比较,这需要花费O(n ^ 2)的时间。在你进行所有可能的比较之前,你不能确定你没有比较的一对实际上并不相同。