LeetCode刷题_c++版-34在排序数组中查找元素的第一个和最后一个位置

class Solution {
    
    
public:
    vector<int> searchRange(vector<int>& nums, int target) {
    
    
    
        int begin = 0;
        int end = nums.size() - 1;
        vector<int> result;
        while(begin<= end){
    
    
        
            int mid = (begin+ end)/2;
            //二分查找,如果mid = target,左右端点向两边扩散
            if(nums[mid] == target){
    
    
            //左端点向左扩散
                begin = mid ;
                while(begin - 1 >= 0 && nums[begin - 1] == target )
                    begin = begin -1;
                //右端点向右扩散
                end = mid;
                while(end + 1 < nums.size() && nums[end + 1] == target)
                    end = end + 1;
                //得到区间范围
                result.push_back(begin);
                result.push_back(end);
                return result;
            }
            else if (nums[mid] <target){
    
    
                begin = mid + 1;
            }
            else end = mid - 1;
        }
        //如果没找到目标元素,返回-1
        result.push_back(-1);
        result.push_back(-1);
        return result;
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44343355/article/details/129020277
今日推荐