描述:
给定一个包含 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;
}
};
本文介绍了一种使用二分查找的方法来解决在一个已排序的数组中寻找特定目标值的起始和结束位置的问题,并提供了一个C++实现示例。
326

被折叠的 条评论
为什么被折叠?



