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

中等 · 二分查找

题目

34. 在排序数组中查找元素的第一个和最后一个位置
官方题解

直接开始默写y总的二分查找模板 二分查找模板

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> res(2);
        if (!nums.size()) return {-1, -1};

        // 先找左端点
        int l = 0, r = nums.size() - 1;
        while (l < r) {
            int mid = l + r >> 1;
            if (nums[mid] >= target) r = mid;
            else l = mid + 1;
        }
        if (nums[r] != target) res[0] = -1;
        else res[0] = r;
        // 在找右端点

        l = 0, r = nums.size() - 1;
        while (l < r) {
            int mid = l + r + 1>> 1;
            if (nums[mid] <= target) l = mid;
            else r = mid - 1;
        }
        if (nums[r] != target) res[1] = -1;
        else res[1] = r;
        return res;
    }
};