这道题。。我第一遍没做出来。参看了一些题解后,感觉它们大部分都没讲明白这道题为什么可以用二分法。
所以这里就把我的思考分享出来吧。
首先,我们需要注意题目的三个条件:
(1)限定了nums[i]!=nums[i+1],这为我们排除了出现连续相等子序列的情况。
(2)num[-1]和num[N]的值为负无穷,那么数组在左边界单调增,在右边界单调减,简单分析可知,这使得数组中一定存在一个极大值。
(3)只需找到任意一个极大值的索引。
那么,基于减治的思想,我们可以在数组中寻找满足条件(2)的子数组,并逐步缩小搜索范围,直到找一个极大值。
为了满足时间复杂度为O(logN)的要求,我们对中间位置的元素进行探索,每次将搜索范围缩小为之前的一半。
具体而言,对于中间位置元素num[mid]:
若num[mid] > num[mid+1],num[l, mid]左右边界分别是单调增和单调减区域,满足条件(2),而num[mid+1,r]左右边界都是单调减区域,不满足条件(2)