Java力扣34题

我是通过两部分的二分查找完成这道题的

首先把该问题遇到的情况分为三种,第一种:target位于数组的所有数字左边或者右边,返回【-1,-1】

第二种:target在数组的范围内,但是数组里面没有与target相等的数字,即返回【-1,-1】

第三种:target在数组里面有相等的数字,返回对应的数组下标范围;

class Solution {

    public int[] searchRange(int[] nums, int target) {

        代码主体,通过调用两个方法进行搜索左右边界

        int Boundaryleft=getleft(nums,target);

        int Boundaryright=getright(nums,target);

        if(Boundaryleft==-2 || Boundaryright==-2){

            return new int[]{-1,-1};

        }//情况一

        if(Boundaryright-Boundaryleft>1){

            return new int[]{Boundaryleft+1,Boundaryright-1};

        }//情况三

        return new int[]{-1,-1};

    }//情况二

    int getleft(int[] nums, int target){

        //寻找左边界

        int left=0;

        int right=nums.length-1;

        int leftborder=-2;

        while(left<=right){

            int mid=left+(right-left) /2;

            if(nums[mid]>=target){

                right=mid-1;

                leftborder=right;

            }

            else{

                left=mid+1;

            }

        }

        return leftborder;

    }

    int getright(int[] nums, int target){

        //寻找右边界

        int left=0;

        int right=nums.length-1;

        int rightborder=-2;

        while(left<=right){

            int mid=left+(right-left) /2;

            if(nums[mid]>target){

                right=mid-1;

            }

            else{

                left=mid+1;

                rightborder=left;

            }

        }

        return rightborder;

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值