力扣1095.山脉数组中查找目标值
-
先二分出峰顶的下标
- 然后分为左右两段再做二分
-
class Solution { public: int findInMountainArray(int target, MountainArray &mountainArr) { int l = 0,r = mountainArr.length()-1; while(l<r) { int mid = (l + r + 1) / 2; if(mountainArr.get(mid) > mountainArr.get(mid - 1)) l = mid; else r = mid - 1; } int peak = r; if(mountainArr.get(peak) == target) return peak; l = 0,r = peak; while(l<r) { int mid = (l + r) / 2; if(mountainArr.get(mid) >= target) r = mid; else l = mid + 1; } if(mountainArr.get(l) == target) return l; l = peak,r = mountainArr.length() - 1; while(l<r) { int mid = (l + r + 1) / 2; if(mountainArr.get(mid) >= target) l = mid; else r = mid - 1; } if(mountainArr.get(l) == target) return l; return -1; } };