题目
Given an array of integers 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].
For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].
思路
先用二分法找到某个target所在下标,然后往前后遍历,直到遍历到不同元素。
代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> range;
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (target == nums[mid]) {
int begin = mid;
int end = mid;
while (begin >= 0 && nums[begin] == target) {
begin--;
}
while (end < nums.size() && nums[end] == target) {
end++;
}
return {begin+1, end-1};
} else if (target < nums[mid]) {
right = mid - 1;
} else if (target > nums[mid]) {
left = mid + 1;
}
}
return {-1, -1};
}
};