题意理解:
对于有序的vector数列,找到target对应的begin和end位置,如果数列中不存在target,则返回[-1, -1]。
解题分析:
二分法。
解题代码:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
bool isFind=false;
vector<int> ans;
while(1){
int dis=right-left;
//cout<<"dis= "<<dis<<endl;
if(dis<=1){
if(nums[left]==target || nums[right]==target){
isFind=true;
}
break;
}
int mid=(right-left)/2;
if(nums[left+mid]>target){
right=left+mid;
}else if(nums[left+mid]<target){
left=left+mid;
}else{
isFind=true;
break;
}
}
if(isFind){
for(int i=left; i<=right; i++){
if(nums[i]==target){
ans.push_back(i);
break;
}
}
for(int i=right; i>=left; i--){
if(nums[i]==target){
ans.push_back(i);
break;
}
}
}else{
ans.push_back(-1);
ans.push_back(-1);
}
return ans;
}
};