
调试了半天终于过了......
神人题目,主要是情况太太太多了,有先找到左边界的情况、先找到右边界的情况、找到中间节点之后要依次找左右边界的情况......其实要是弄多一点循环应该就不会像我写的这么复杂,但我太懒了就是不想多开循环。
cpp
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left=0;
int right=nums.size()-1;
vector<int> result{-1,-1};
int recordl=left;
int recordr=right;
while(left<=right){
int mid=(left+right+1)/2;
if(nums[mid]>target) right=mid-1;
else if(nums[mid]<target) left=mid+1;
else{
if(mid+1==nums.size()||nums[mid+1]!=target){result[1]=mid;right=mid-1;}
if(mid==0||nums[mid-1]!=target){result[0]=mid;left=mid+1;}
if(result[1]!=-1&&result[0]!=-1) return result;
else if(result[0]!=-1&&recordl!=0){
left=recordl;
right=recordr;
recordl=0;
}
else if(result[0]==-1&&recordl==0){
recordl=mid+1;
recordr=right;
right=mid-1;
}
else if(result[0]==-1) right=mid-1;
else left=mid+1;
}
}
return result;
}
};