题目大意:给出一个已排序的数组和一个目标数值,寻找该数值在数组中的起点和终点。如果不存在则返回(-1,-1).时间复杂度为logn
算法思想:
1.如果数组长度为0则直接返回(-1,-1)
2.利用STL中的equal_range()算法二分搜索出目标值的区间。
3.判断是否存在目标区间如果不存在则返回(-1,-1),若存在则计算出区间起点和终点。
4.返回区间。
代码如下:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> range;
range.push_back(-1);
range.push_back(-1);
if(nums.size()==0) return range;
pair<vector<int>::iterator,vector<int>::iterator>tange;
tange=equal_range(nums.begin(),nums.end(),target);
if(*tange.first!=target) return range;
range[0]=distance(nums.begin(),tange.first);
range[1]=distance(nums.begin(),tange.second)-1;
return range;
}
};