思路和时间复杂度
- 思路:先找到中间数,如果没找到就返回{-1,-1},如果找到了就以当前节点为中点,向两边扩
- 时间复杂度:

代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> res;
if(nums.size() == 0) return {-1,-1};
// 左闭右开
int left = 0, right = nums.size();
int cur = -1;
while(left < right){
int mid = (left + right) / 2;
if(nums[mid] < target){
left = mid + 1;
}else if(nums[mid] > target){
right = mid;
}else{
cur = mid;
break;
}
}
if(cur == -1) return {-1,-1};
left = cur;
right = cur;
for(int i = cur; i >= 0; i--){
if(nums[i] != target){
break;
}else{
left=i;
}
}
for(int i = cur; i < nums.size(); i++){
if(nums[i] != target){
break;
}else{
right=i;
}
}
return {left, right};
}
};