问题:
给定一个按照升序排列的整数数组,找出被给定目标值的开始和结束位置。算法时间复杂度要求
O(logn)
。如果目标值不存在则返回[ -1, -1 ]。
例子:
Input: nums = [5,7,7,8,8,10],target = 8
Output: [3,4]
解题思路:
由于时间复杂度要求为
O(logn)
,这里考虑使用二分法。先找出左边界,然后在左边界的基础上,找出右边界。
实现:
vector<int> searchRange(vector<int>& nums, int target)
{
vector<int> result(2,-1);
int m = 0;
int n = nums.szie() - 1;
if(n == -1)
return result;
while(m < n)
{
int mid = (m + n) / 2;
if(target > nums[mid])
m = mid + 1;
else
n = mid;
}
if(nums[m] != target)
return result;
else
result[0] = m;
n = nums.size() - 1;
while(m < n)
{
int mid = (m + n) / 2;
if(target < nums[mid])
n = mid - 1;
else
m = mid;
}
result[1] = n;
return result;
}