【发布时间】:2016-07-22 21:12:12
【问题描述】:
给定一个大小为 n 的排序整数数组 A,其中 n 是 4 的倍数。有人可以帮我找到一个算法来确定是否存在一个在数组中至少重复 n/4 次的元素O(log n) 时间。
【问题讨论】:
-
这是一个有趣的问题,但问题的形式在这里非常不鼓励。
-
这意味着至少有
n/4连续出现。只需考虑 4 个n/4子数组获取中间元素并使用二分法搜索第一次和最后一次出现并检查它们的距离。它之所以起作用,是因为该元素要么出现在子数组x:x+n/4的中间,要么出现在前一个块或下一个块的中间。事实上,这适用于任何数组大小,不同之处在于,当n不是4的倍数时,您必须重复此操作 5 次(尽管仍然是 O(log n))。 -
事实上你甚至不必取中间元素。第一个适用于。只需选择子数组中的任何相对索引并检查所有子数组。如果不是重复的,则意味着 next 或 prio 子数组的第一个元素必须是它(如果有的话)。
标签: algorithm sorting array-algorithms