[二分查找] 1095. 山脉数组中查找目标值

https://leetcode-cn.com/problems/find-in-mountain-array/

在这里插入图片描述

/**
 * // This is the MountainArray's API interface.
 * // You should not implement it, or speculate about its implementation
 * function MountainArray() {
 *     @param {number} index
 *     @return {number}
 *     this.get = function(index) {
 *         ...
 *     };
 *
 *     @return {number}
 *     this.length = function() {
 *         ...
 *     };
 * };
 */

/**
 * @param {number} target
 * @param {MountainArray} mountainArr
 * @return {number}
 */
var findInMountainArray = function(target, mountainArr) {
    let peak = getPeak(target, mountainArr);
    let left = searchLeft(target, mountainArr, peak);
    let right = searchRight(target, mountainArr, peak);

    if(left === -1) return right;
    else return left;
};


function getPeak(tar, arr){
    let low = 0;
    let high = arr.length()-1;

    while(low <= high) {
        let mid = (low + high) >> 1;
        let val = arr.get(mid);
        let tmp = arr.get(mid+1);

        if(tmp > val) low = mid+1;
        if(tmp < val) high = mid-1;
    }

    return low;
}

function searchLeft(tar, arr, peak) {
    let low = 0;
    let high = peak;

    while(low <= high) {
        let mid = (low+high) >> 1;
        let val = arr.get(mid);

        if(val < tar) low = mid+1;
        if(val > tar) high = mid-1;
        if(val === tar) return mid;
    }

    return -1;
}


function searchRight(tar, arr, peak) {
    let low = peak;
    let high = arr.length()-1;

    while(low<=high){
        let mid = (low + high) >> 1;
        let val = arr.get(mid);

        if(val > tar) low = mid+1;
        if(val < tar) high = mid-1;
        if(val === tar) return mid;
    }

    return -1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值