leetcode:852. 山脉数组的峰顶索引

题目来源

题目描述

在这里插入图片描述
在这里插入图片描述

题目解析

二分

使用[二分]进行查值,需要确保序列本身满足二段线:当选定一个基准值之后,结合[一段满足/一段不满足]的特性来实现“折半”的查找效果。

对于本题,由于arr数值各不相同,因此峰顶元素左侧必然严格单调递增,峰顶元素右侧必然不满足

因此以峰顶元素为分割点的 arr 数组,根据与 前一元素/后一元素 的大小关系,具有二段性

  • 峰顶元素左侧满足 arr[i-1] < arr[i]arr[i−1]<arr[i] 性质,右侧不满足
  • 峰顶元素右侧满足 arr[i] > arr[i+1]arr[i]>arr[i+1] 性质,左侧不满足

因此我们可以选择任意条件,写出若干「二分」版本

class Solution {
public:
    int peakIndexInMountainArray(vector<int>& arr) {
        int L = 0, R = arr.size();
        while (L < R){
            int M = L + (R - L) / 2;
            if(arr[M] < arr[M + 1]){
                L = M + 1;
            }else{
                R = M;
            }
        }
        return L;
    }
};

类似题目

二分专题

题目
leetcode:4. 寻找两个正序数组的中位数
leetcode:29. 两数相除
leetcode:33. 搜索旋转排序数组中target的下标(值互不相同)Search in Rotated Sorted Array
leetcode:34. 在排序数组中查找元素的第一个和最后一个位置
leetcode:35. 给定有序数组和target,搜索target应该插入的位置
leetcode:852. 山脉数组的峰顶索引
leetcode:74. 搜索二维矩阵是否存在target
leetcode:81. 搜索旋转排序数组中target的下标(值可以相同)Search in Rotated Sorted Array II
leetcode:153. 对一个有序数组进行了若干次旋转,让找出旋转数组的最小值 Find Minimum in Rotated Sorted Array
leetcode:154. 寻找旋转排序数组中的最小值 II(含重复数字) Find Minimum in Rotated Sorted Array II
leetcode:162. 一维数组中寻找局部最大值 Find Peak Element
leetcode:852. 山脉数组的峰顶索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值