34は二分搜索ソート配列の要素の最初と最後の位置を探します

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

バイナリ検索についてソフトウェアの本質

この方法によれば、各書き込み要求が境界と次のように、及び下限上部得るために、バイナリ検索機能を:

class Solution {
private:
    int left_bound(vector<int>& nums, int target){
        if(nums.size() == 0){
            return -1;
        }
        int left = 0, right = nums.size();
        while(left < right){
            int mid = (left + right) / 2;
            if(nums[mid] == target){
                right = mid;
            }
            else if(nums[mid] < target){
                left = mid + 1;
            }
            else if(nums[mid] > target){
                right = mid;
            }
        }
        if(left == nums.size()){
            return -1;
        }
        return nums[left] == target ? left : -1;
    }
    int right_bound(vector<int>& nums, int target){
        if(nums.size() == 0){
            return -1;
        }
        int left = 0, right = nums.size();
        while(left < right){
            int mid = (left + right) / 2;
            if(nums[mid] == target){
                left = mid + 1;
            }
            else if(nums[mid] < target){
                left = mid + 1;
            }
            else if(nums[mid] > target){
                right = mid;
            }
        }
        if(right == 0){
            return -1;
        }
        return nums[right-1] == target ? (right-1) : -1;
    }
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> res;
        int left_b = left_bound(nums, target);
        if(left_b == -1){
            res.push_back(-1);
            res.push_back(-1);
            return res;
        }
        res.push_back(left_b);
        int right_b = right_bound(nums, target);
        res.push_back(right_b);
        return res;
    }
};

 

公開された62元の記事 ウォンの賞賛9 ビュー7793

おすすめ

転載: blog.csdn.net/qq_40491305/article/details/104114405
おすすめ