描述:
给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。
如果目标值不在数组中,则返回[-1, -1]
样例:
给出[5, 7, 7, 8, 8, 10]
和目标值target=8
,
返回[3, 4]
分析:
先用二分法查找到给出数组中等于target的下标,然后分别向前和向后判断数组中的值是否为target。
class Solution {
/**
*@param A : an integer sorted array
*@param target : an integer to be inserted
*return : a list of length 2, [index1, index2]
*/
public:
vector<int> searchRange(vector<int> &A, int target) {
// write your code here
int size = A.size();
vector<int>result(2, -1);
int lptr = 0, rptr = size - 1, mid = size / 2;
while(lptr <= rptr){
if(A[mid] == target){
lptr = mid;
rptr = mid;
while(A[lptr] == target){
lptr--;
}
while(A[rptr] == target){
rptr++;
}
// 注意为什么要 加1 和 减1
result[0] = lptr + 1;
result[1] = rptr - 1;
return result;
}
else{
if(A[mid] > target)
rptr = mid - 1;
else
lptr = mid + 1;
mid = (lptr + rptr) / 2;
}
}
return result;
}
};