题目描述
题目分析
比较容易想到O(n)的做法,即遍历一遍数组找最大值所在位置的方法,更快的方法应当使用二分法进行寻找,最快可在O(logn)的范围中找到。
- 使用l,r指针分别指向第一个和最后一个,mid指向中间
- 判断arr[mid]和arr[mid-1],arr[mid+1]的关系,如果arr[mid-1]>arr[mid],说明mid点不是山峰数组的最高点,最高点应当在mid点的左侧,此时让r=mid-1。反之亦然
- 当l-r==1时,也就是只剩下两个时,输出较大的,否则会错过。
参考代码
class Solution {
public:
int peakIndexInMountainArray