/** * // This is MountainArray's API interface. * // You should not implement it, or speculate about its implementation * interface MountainArray { * public int get(int index) {} * public int length() {} * } */
classSolution { publicintfindInMountainArray(int target, MountainArray mountainArr) { // 先找到峰顶索引 peakIdx intlo=0, hi = mountainArr.length() - 1; while (lo + 1 < hi) { intmid= lo + (hi - lo) / 2; intmidVal= mountainArr.get(mid);
if (midVal > mountainArr.get(mid - 1)) { lo = mid; } else { hi = mid; } } intpeakIdx= mountainArr.get(lo) > mountainArr.get(hi)? lo: hi;
privateintbinSearch(MountainArray mountainArr, int lo, int hi, int target, boolean asc) { while (lo <= hi) { intmid= lo + (hi - lo) / 2; intmidVal= mountainArr.get(mid);
if (midVal == target) { return mid; } if (midVal < target) { lo = asc? mid + 1: lo; hi = asc? hi: mid - 1; } else { hi = asc? mid - 1: hi; lo = asc? lo: mid + 1; } } return -1; } }