在排序数组中查找元素的第一个和最后一个

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

你的算法时间复杂度必须是 O(log n) 级别。

如果数组中不存在目标值,返回 [-1, -1]。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: [3,4]
示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: [-1,-1]

解答:

public int[] searchRange(int[] nums,int target){
        int[] res={-1,-1};
        if(nums!=null&&nums.length>0){
            int _0=-1;
            int _1=-1;
            int lo=0;
            int hi=nums.length-1;
            while (lo<=hi){
                int mid=(lo+hi)/2;
                if(nums[mid]>target){
                    hi=mid-1;
                }else if(nums[mid]<target){
                    lo=mid+1;
                }else{
                    int turnLeft=mid;
                    int turnRight=mid;
                    while (turnLeft>=lo||turnRight<=hi){
                        if(_0>-1&&_1>-1){
                            break;
                        }
                        if(_0==-1&&(turnLeft>=lo&&(turnLeft-1)>=0&&nums[turnLeft-1]!=target)||(turnLeft==lo&&nums[turnLeft]==target)){
                            _0=turnLeft;
                        }
                        if(_1==-1&&(turnRight<=hi&&(turnRight+1)<nums.length&&nums[turnRight+1]!=target)||(turnRight==hi&&nums[turnRight]==target)){
                            _1=turnRight;
                        }
                        turnLeft--;
                        turnRight++;
                    }
                    res[0]=_0;
                    res[1]=_1;
                    break;
                }
            }
        }
        return res;
    }
View Code

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array

原文地址:https://www.cnblogs.com/wuyouwei/p/11936025.html