leetcode1095_山峰数组

public int findInMountainArray(int target, MountainArray mountainArr) {
        int len = mountainArr.length();
        int l = 0, r = len;
        while(l < r) {
            int mid = l + r + 1>> 1;
            if(mountainArr.get(mid) > mountainArr.get(mid-1)) l = mid;
            else r = mid -1;
        }
        int highIdx = l;
        r = highIdx;
        l = 0;
        while(l < r) {
            int mid = l + r >> 1;
            // first >= target
            if(mountainArr.get(mid) >= target) r = mid;
            else l = mid + 1;
        }
        if(mountainArr.get(l) == target) return l;
        l = highIdx;
        r = len - 1;
        while(l < r) {
            int mid = l + r + 1 >> 1;
            // last >= target
            if(mountainArr.get(mid) >= target) l = mid;
            else r = mid -1;
        }
        if(mountainArr.get(l) == target) return l;
        else return -1;
    }
posted @ 2022-02-03 21:05  明卿册  阅读(31)  评论(0编辑  收藏  举报