34. Find First and Last Position of Element in Sorted Array

Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

Example 1:

Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
// STL lower_bound and upper_bound Method
vector<int> searchRange(vector<int>& nums, int target) { // time: O(logn); space: O(1)
    vector<int> res(2, -1);
    if (nums.empty()) return res;
    auto start = lower_bound(nums.begin(), nums.end(), target);
    if (start == nums.end() || *start != target) return res;
    else res[0] = start - nums.begin();
    auto end = upper_bound(nums.begin(), nums.end(), target);
    res[1] = end - nums.begin() - 1;
    return res;
}
circle-info

兩個binary search就是分別在實現STL lower_bound和upper_bound,去分別找到不大於target的第一個位置,還有大於target的第一個位置。

Last updated

Was this helpful?