为什么我的 mid-1 方法在这个二分搜索问题中不起作用?

Why my mid-1 approach is not working in this binary-search question?

我使用 mid+1 方法解决了这个问题,它很容易解决,但是当我想解决同样的问题时,我将比较形式 mid+1 更改为 mid-1 它不起作用,你能帮我解决一下吗我错了吗?

问题Link

我的初始方法(中+1):

class Solution {
public int peakIndexInMountainArray(int[] arr) {
    int start=0;
    int end=arr.length-1;
    
    while(start<=end){
        int mid=start-(start-end)/2;
        if(arr[mid]<arr[mid+1]){
            start=mid+1;
        }
        else {
            end=mid-1;
        }
    }
    return start;
}
}

第二种方法(中间 1 方法的错误答案)

class Solution {
public int peakIndexInMountainArray(int[] arr) {
    int start=0;
    int end=arr.length-1;
    
    while(start<=end){
        int mid=start-(start-end)/2;
        if(arr[mid-1]<arr[mid]){
            start=mid+1;
        }
        else {
            end=mid-1;
        }
    }
    return end;
}
}

您应该将起始值设置为 1:int start=0; 因为如果您要搜索的值位于列表的第一个位置(例如列表:10、6、5、2、1),您现在可以将中间值设为 0,因此峰值是第一个元素列表的一部分,当您尝试访问 arr[mid-1] 时,您会收到 ArrayIndexOutOfBoundsException。