letcode每日一题-在排序数组中查找元素的第一个和最后一个位置

话不多说,直接上题!!!

题目简介:

思路:
我们根据题目可知:1.nums升序排列的整数数组 2.我们需要找出给定目标值在数组中的开始位置和结束位置。
有序数组,寻找指定目标值的位置不用多想必然时采用二分查找啦!
代码如下:


public int[] searchRange(int[] nums, int target) {
        int[] result=new int[]{-1,-1};
        binarySearch(0,nums.length-1,nums,target,result);
        return result;
    }
    //二分查找
    public void binarySearch(int begin,int end,int[] nums,int target,int[] result){
        if(begin>end){
            return;
        }
        int mid=(begin+end)/2;
        if(nums[mid]==target){
            //等于目标值
            int i=mid;
            //寻找左边界
            for(;i>=begin;i--){
                if(nums[i]<target){
                    i=i+1;
                    break;
                }
            }
            result[0]=Math.max(i,begin);
            i=mid;
            //寻找右边界
            for(;i<=end;i++){
                if(nums[i]>target){
                    i=i-1;
                    break;
                }
            }
            result[1]=Math.min(i,end);
        }else if(nums[mid]<target){
            //比目标值小,向左查找
            binarySearch(mid+1,end,nums,target,result);
        }else{
            //比目标值大,向右查找
            binarySearch(0,mid-1,nums,target,result);
        }
    }

运行表现,虽然我们可能不是最优美的,但是我们是最快的:

posted @ 2020-12-01 10:59  CodeWangHAHA  阅读(66)  评论(0编辑  收藏  举报