初始化两个指针 l 和 r 分别指向数组的起始和结束位置。
使用 while 循环,当 l 小于 r 时,进行以下步骤:
a. 计算中间索引 mid,通过 (r - l)/2+ l 的方式获得。
b. 检查 arr[mid] 和 arr[mid +1] 的关系:
如果 arr[mid]< arr[mid +1],说明当前处于上坡部分,峰值一定在 mid 的右侧。因此,将 l 更新为 mid +1。
如果 arr[mid]>= arr[mid +1],说明当前处于下坡部分或峰值可能就是 mid。因此,将 r 更新为 mid。
循环结束时,r 的值就是峰值的索引
classSolution{publicintpeakIndexInMountainArray(int[] arr){int l =1;int r = arr.length -1;while(l < r){int mid =(r - l)/2+ l;if(arr[mid]< arr[mid +1]){// 说明 是上坡 缩小左边界
l =mid +1;}else{
r = mid;// 说明遇到了下坡}}return r;}}