Java力扣34题

该文章介绍了一个使用二分查找算法解决的问题,针对一个整数数组和一个目标值,分别找出目标值在数组中的左侧和右侧边界。如果目标值不存在,返回[-1,-1];存在则返回其下标范围。文章提供了具体的Java代码实现,包括getLeft和getRight两个方法来确定边界。
摘要由CSDN通过智能技术生成

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

首先把该问题遇到的情况分为三种,第一种: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、付费专栏及课程。

余额充值