面试:数组:区间搜索

题目

给定一个区间和目标值,找出目标值的起始下标,若无目标值,则返回[-1,-1]
要求时间复杂度是O(lgn)


算法

  1. 找到比目标值小的最大值,下一步是目标值
  2. 找到比目标值大的最小值,上一步是目标值

import java.util.*;

public class Solution{
    public int[] searchRange(int[] A,int target){
        int[] range={-1,-1};
        int low=0,upper=A.length,mid;
        if(A[upper-1]<target)
            return range;
        while(low<upper){
            mid=(low+upper)/2;
            if(A[mid]<target){
                low=mid+1;

            }else
                upper=mid;
        }

        if(A[low]!=target)
            return range;

        range[0]=low;

        //搜索终点
        upper=A.length;
        while(low<upper){
            mid=(low+upper)/2;
            if(A[mid]>target)
                upper=mid;
            else
                low=mid+1;

        }

        range[1]=upper-1;
        return range;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值