使用重复元素查找数组中的最大值

时间:2012-05-09 15:46:52

标签: arrays algorithm

我在两天前的一次采访中遇到了一个关于最佳地找到数组中最大元素的问题,我对此有疑问。

采访者描述的数组由整数值组成,可能重复(不一定在连续的位置),它也包含两部分(一部分可能为空):的第一部分>非递减订单,以及非递增订单的第二部分,即如果a [n]是由n个整数值组成的数组,则a [i]< = a [i + 1],i在[1,m]和a [j]> = a [j + 1 ],[m,n]和m中的j位于1和n之间(包括1和n)。现在,他们让我以最有效的方式找到数组中的最大值

我认为,由于某些元素可能会重复,因此我无法使用分而治之策略来构建搜索空间。如果所有元素都不同,我们将能够使用二进制搜索 lg n 时间内找到最大值。但是至少存在一个输入序列(可能在所有元素相同的情况下),我们至少需要进行n-1比较才能确定哪个元素最大。

面试官让我思考是否可以对输入施加一些限制,以便在 lg n 时间内解决问题。我当时无法解决而仍在思考。

如果你可以帮我思考,那会很有帮助。

1 个答案:

答案 0 :(得分:6)

面试官试图了解你是否了解ternary search:如果你要求部件严格增加然后严格减少,你就可以在Log3(N)得到答案。因此,访问者正在寻找的额外要求可能是重复的条目(如果有的话)应该出现在上升 - 下降转换点的不同侧面。