LeetCode 1095 山脉数组中查找目标值——二分寻找极值

  • 链接 : 原题

  • 题意 : 给定一个山脉数组,即凸函数,寻找一个数值等于target的index。

  • 思路 :
    因为凸函数峰值的左右都是一个单调函数,所以只要找到峰值,再对两边分别进行二分查找就可。
    凹凸函数找峰值,本来我是想用三分查找的,但是三分查找能确定峰值是double类型,即连续函数才适用的。整数点构成的凹凸函数,三分查找只能缩减一个区间。例如此题 :牛客算法周周练4 E题装备合成
    所以本次学到了一种 二分凹凸函数找极值 的方法。

    对于一个区间 [l , r] ,mid1 = (l + r)/2,我们再寻找一个mid2 = mid1 + 1。如果mid1 的值 > mid2 的值,那么 [mid2 , r] 是一个递减的区间;否则 [l, mid1]是一个递增的区间。
    在这里插入图片描述
    这样最后就能确定一个峰值peak。
    最后再对左边递增区间二分查找,如果没找到再到右边二分查找。

  • 代码:

/**
 * // This is the MountainArray's API interface.
 * // You should not implement it, or speculate about its implementation
 * class MountainArray {
 *   public:
 *     int get(int index);
 *     int length();
 * };
 */

class Solution {
   
public:
    int findInMountainArray(int target, MountainArray &mountainArr) {
   
        int l = 0, r = mountainArr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值