题目描述
找到一个升序序列中某个数在哪个范围内,没有的话返回【-1,-1】
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].
代码实现
使用二分法找到目标数字的位置A,然后往A的前面和后面走找到边界。
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int nums_len = nums.size();
int lo = 0, hi = nums_len - 1;
vector<int> result;
int mid = 0;
if(nums_len < 1) {
result.push_back(-1);
result.push_back(-1);
return result;
}
while(lo <= hi) {
mid = (lo + hi) >> 1;
if(nums[mid] > target)
hi = mid - 1;
else if(nums[mid] < target)
lo = mid + 1;
else
break;
}
int tmp = mid;
int left = -1, right = -1;
while(mid >= 0 && nums[mid] == target) {
left = mid;
mid--;
}
while(tmp < nums_len && nums[tmp] == target) {
right = tmp;
tmp++;
}
result.push_back(left);
result.push_back(right);
return result;
}
};