34.最初と最後の位置にソートされた配列の要素を探します

ここに画像を挿入説明
方法の一つ:二分法

二つの二分法

class Solution {
private:
    int first(vector<int>& nums, int target){   //寻找起始位置
        int left=0,right=nums.size()-1;
        while(left<right){
            int mid=(left+right)>>1;
            if(nums[mid]<target)    //[mid + 1, right]
                left=mid+1;
            else
                right=mid;
        }
        if(nums[left]==target)
            return left;
        return -1;
    }

    int last(vector<int>& nums, int target){    //寻找结束位置
        int left=0,right=nums.size()-1;
        while(left<right){
            int mid=(left+right+1)>>1;
            if(nums[mid]>target)    //[left,mid-1]
                right=mid-1;
            else
                left=mid;
        }
        return left;
    }

public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if(nums.empty())
            return {-1,-1};
        int l=first(nums,target);
        if(l==-1)
            return {-1,-1};
        int r=last(nums,target);
        return {l,r};
    }
};
公開された143元の記事 ウォンの賞賛0 ビュー1668

おすすめ

転載: blog.csdn.net/qq_43604517/article/details/104599409
おすすめ