852. 山脉数组的峰顶索引

我们把符合下列属性的数组 A 称作山脉:
A.length >= 3
存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1] 的 i 的值。

示例 1:

输入:[0,1,0]
输出:1

示例 2:

输入:[0,2,1,0]
输出:1

提示:

3 <= A.length <= 10000
0 <= A[i] <= 10^6
A 是如上定义的山脉

思路

其实就是找整个数组最大值,但是由于存在一定顺序,所以可以二分查找

性能分析

时间复杂度O(logN),空间复杂度O(1)

具体代码

class Solution {
    public int peakIndexInMountainArray(int[] A) {
        //赋初值
        int left = 0;
        int right = A.length - 1;
        int mid = (left + right) / 2;

        //二分查找
        while(left < right){
            mid = (left + right) / 2;
            //在左侧上升坡,则left右移
            if(A[mid] < A[mid + 1]){
                left = mid + 1;
            }
            //在右侧下降坡,则right左移
            else{
                right = mid;
            }
        }
        //此时left = right = 最终结果
        return left;
    }
}

你可能感兴趣的:(852. 山脉数组的峰顶索引)