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

 

 

两遍二分就行

class Solution {
public:
    vector<int> searchRange(vector<int> &nums, int target) {
        return {solve(nums, target, 0), solve(nums, target, 1)};
    }

private:
    int solve(vector<int> &nums, const int &target, int flag) {     // flag: 0 最前, 1 最后
        int l = 0, r = nums.size() - 1;
        int ans = -1;
        while(l <= r) {
            int mid = (l + r) >> 1;
            if(nums[mid] > target || (!flag && nums[mid] == target)){
                r = mid - 1;
            }
            else l = mid + 1;
            if(nums[mid] == target) ans = mid;
        }
        return ans;
    }
};

 

posted @ 2021-08-07 11:28  rookie_Acmer  阅读(25)  评论(0)    收藏  举报