算法日常・每日刷题--<二分查找>4

852. 山脉数组的峰顶索引 - 力扣(LeetCode)852. 山脉数组的峰顶索引 - 给定一个长度为 n 的整数 山脉 数组 arr ,其中的值递增到一个 峰值元素 然后递减。返回峰值元素的下标。你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。 示例 1:输入:arr = 0,1,0输出:1示例 2:输入:arr = 0,2,1,0输出:1示例 3:输入:arr = 0,10,5,2输出:1 提示: * 3 <= arr.length <= 105 * 0 <= arri <= 106 * 题目数据 保证 arr 是一个山脉数组https://leetcode.cn/problems/peak-index-in-a-mountain-array/

当右侧比左侧高时

left可以更新到mid右侧

当右侧比左侧低时

right只能更新到mid位置,不然会错过最高点

接下来套上一个的模板即可

cpp 复制代码
class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int left=0,right=arr.size()-1;
        while(left<right)
        {
            int mid=left+(right-left)/2;
            if(arr[mid]<=arr[mid+1])
            left=mid+1;
            else
            right=mid;
        }
        return left;
    }
};