详细思路

找到mid,如果正好是target,两头扩散输出答案
 
精确定义
left左数组第一个
mid左数组最后一个右数组第一个
right右数组最后一个
i判断好了的左边
j判断好了的右边
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int n=nums.size();
        if(n==0)return {-1,-1};
        int left=0,right=n-1;
        while(left<=right){
            int mid=left+(right-left)/2;
            if(nums[mid]==target){
                int i=mid,j=mid;
                while(i-1>=0&&nums[i-1]==target)i--;
                while(j+1<=n-1&&nums[j+1]==target)j++;
                return {i,j};
            }
            else if(target<nums[mid])right=mid-1;
            else if(target>nums[mid])left=mid+1;
        }
        return {-1,-1};
    }
};

 

posted on 2021-07-27 20:10  offer快到碗里来~  阅读(39)  评论(0)    收藏  举报