Arrays 在具有重复元素的数组中查找最大值

Arrays 在具有重复元素的数组中查找最大值,arrays,algorithm,Arrays,Algorithm,两天前的一次采访中,我遇到了一个关于如何在数组中找到最大元素的问题,对此我有疑问 采访者描述的数组由可能重复的整数值组成(不一定是连续的),它也由两部分组成(一部分可能是空的):第一部分为非递减顺序,第二部分为非递增顺序,即如果a[n]是由n个整数值组成的数组,则a[i]=a[j+1]、[m,n]中的j和m位于1和n之间(包括1和n)。现在,他们要求我以最有效的方式找到数组中的最大值 我认为,由于某些元素可能会重复,我无法使用分治策略对搜索空间进行元素划分。如果所有元素都是不同的,我们将能够使用

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

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

我认为,由于某些元素可能会重复,我无法使用分治策略对搜索空间进行元素划分。如果所有元素都是不同的,我们将能够使用二进制搜索在lgn时间内找到最大值。但至少存在一个输入序列(当所有元素都相同时)对于这一点,我们至少需要进行n-1比较,然后才能知道哪个元素是最大的

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


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

面试官想看看你是否知道:如果你要求零件严格增加,然后严格减少,你可以在
Log3(N)中得到答案
。因此,面试官寻找的额外要求可能是重复条目(如果有)应该出现在升降转换点的不同侧面。

除了三元搜索要求函数部分严格递增,部分严格递减。@Shahbaz我想回答这个问题“面试官让我想一想,我是否可以对输入施加一些限制,以便问题能够在短时间内得到解决“问题的一部分。OP答案的第一部分是正确的。但是单峰函数单峰函数是一个严格递增然后严格递减的函数,或者反之亦然。而且,我想,这也可以使用二进制搜索来完成。使用二进制搜索我可以在Log2(n)中得到它。”.但是如果元素重复,那么???(比如说,所有元素都是相同的)@sarthak很抱歉,最初的答案不清楚:您正确地回答了问题的第一部分,这是第二部分(找到一个附加条件来施加在数组上,以便可以在
Log(N)
中搜索)这可以通过三元搜索来解决。不过,二元搜索不起作用。@sarthak 1000 2s的数组是一个反例,它表明如果允许在切换点的任意一侧重复项目,则只能进行线性搜索。但是,如果您有类似于
{1,2,3,4,5,4,2,0}的内容
,2和4都重复,但您仍然可以在Log3(N)中找到最大值。