LeetCode34 Find First and Last Position of Element in Sorted Array

题目:

       Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.Your algorithm's runtime complexity must be in the order of O(log n).If the target is not found in the array, return [-1, -1].

       Example 1:

              Input: nums = [5,7,7,8,8,10], target = 8

              Output: [3,4]

       Example 2:

              Input: nums = [5,7,7,8,8,10], target = 6

              Output: [-1,-1]

public class SearchRange {
    public static int[] searchRange(int[] nums, int target) {
        //定义返值
        int[] range = {-1, -1};

        //处理特殊情况:数组为null,数组为空
        if(nums == null || nums.length == 0)
            return range;

        //处理业务逻辑
        int l = 0;
        int r = nums.length - 1;

        while(l <= r ){
            int mid = l + (r - l >> 1);
            if(target > nums[mid])
                l = mid + 1;
            else if(target < nums[mid])
                r = mid - 1;
            //找到目标target
            //由于是有序数组,相同值只会是一个连续区域,以当前mid位置为出发点,分别向左向右寻找边界,这两个边界就是所求
            else{
                l = mid;
                r = mid;
                while(l - 1 >= 0 && nums[l - 1] == target) l--;
                while(r + 1 < nums.length && nums[r + 1] == target) r++;
                range[0] = l;
                range[1] = r;
                return range;
            }
        }
        return range;
    }

    public static void main(String[] args) {
        int[] nums = {5,7,7,8,8,10};
        int target = 5;
        System.out.println(Arrays.toString(searchRange(nums, target)));
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值