题目要求:Search for a Range
Given a sorted array of integers, 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]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
分析:
lower_bound():
lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个不小于value 的值。
调用lower_bound之前必须确定序列为有序序列,否则调用出错。
代码如下:
class Solution { public: vector<int> searchRange(int A[], int n, int target) { int l = distance(A, lower_bound(A, A + n, target)); int u = distance(A, upper_bound(A, A + n, target)); //找不到该元素 if(A[l] != target) return vector<int> {-1, -1}; else return vector<int> {l, u - 1}; } };