题目:searchRange
要求:
给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。
如果目标值不在数组中,则返回[-1, -1]
样例:
给出[5, 7, 7, 8, 8, 10]和目标值target=8,
返回[3, 4]
算法要求:
时间复杂度 O(log n)
解题思路:
先用二分法找到以后,再搜索区间。
算法如下:
vector<int> searchRange(vector<int> &A, int target) {
// write your code here
int left = 0;
int right = A.size() - 1;
int mid = (right + left) / 2;
int size = A.size();
vector<int> vec;
if (size != 0 && *A.begin() > target) {
vec.push_back(-1);
vec.push_back(-1);
return vec;
}
while (left <= right) {
if (A[mid] == target) {
left = mid - 1;
right = mid + 1;
while (right < size && A[right] == target) {
right++;
}
while (left >= 0 && A[left] == target ) {
left--;
}
vec.push_back(left + 1);
vec.push_back(right - 1);
return vec;
} else if (A[mid] > target) {
right = mid - 1;
mid = (right + left) / 2;
} else {
left = mid + 1;
mid = (right + left) / 2;
}
}
vec.push_back(-1);
vec.push_back(-1);
return vec;
}