讨论/《二分查找》 - 在排序数组中查找元素的第一个和最后一个位置/
《二分查找》 - 在排序数组中查找元素的第一个和最后一个位置

判断左右边界
执行结果:
通过
显示详情
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:41.1 MB, 在所有 Java 提交中击败了99.52% 的用户

public int[] searchRange(int[] arr, int findval) {
int[] res=new int[2];
int end =arr.length-1;
int start = 0;
int mid ;

    while (start<=end){
        mid = start+(end-start)/2;
        //查找的值小于中间值即在中间值左边
        if (arr[mid]>findval){
            //结束的位置为中间位置
            end = mid-1;
        }else{
            //查找的值大于中间值即在中间值右边
            if (arr[mid]<findval){
                //开始的位置为中间位置
                start =mid+1;
            }else/*findval等于arr[mid]*/{
                //判断前一个位置是否等于中间位置
                while(mid-1>=0&&arr[mid-1] == findval){
                    mid -=1;
                }
                res[0]=mid;
               
                while(mid+1<=arr.length-1&&arr[mid+1] == findval){

                    mid+=1;
                }
                res[1]=mid;
                return res;
            }
        }
    }
    return  new int[]{-1,-1};
}
展开全部 18 讨论