Problem
Given an array of integers nums sorted in ascending order, find the starting and ending position of a given target value.
If target is not found in the array, return [-1, -1].
Follow up: Could you write an algorithm with O(log n) runtime complexity?
Constraints:
- 0 <= nums.length <= 10^5
- -10^9 <= nums[i] <= 10^9
- nums is a non-decreasing array.
- -10^9 <= target <= 10^9
Example1
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]
Example2
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
Example3
Input: nums = [], target = 0
Output: [-1,-1]
Solution
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
if(nums.empty())
return {-1,-1};
vector<int> ret;
if(nums.empty())
{
return ret;
}
int l = 0;
int r = nums.size() - 1;
while(l < r) //寻找>=target的左边界
{
int mid = l + r >> 1;
if(nums[mid]>=target)
{
r = mid;
}
else
{
l = mid + 1;
}
}
if(nums[l] != target)
return {-1,-1};
ret.push_back(l);
l = 0;
r = nums.size()-1;
while(l < r)//寻找小于等于target的右边界
{
int mid = l + r + 1>> 1;
if(nums[mid]<=target)
{
l = mid;
}
else
{
r = mid -1;
}
}
ret.push_back(l);
return ret;
}
};