34. Find First and Last Position of Element in Sorted Array
题目链接如上
先给代码
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left = searchleft(nums,target);
int right = searchright(nums,target);
if(left == -2 || right == -2){
return {-1,-1};
}
if(right-left>1){
return{left+1,right-1};
}
return {-1,-1};
}
private:
int searchright(vector<int>& nums,int target){
int l = 0;
int r = nums.size()-1;
int mid =0;
int right = -2;
while(l<=r){
mid = l+(r-l)/2;
if(nums[mid]>target){
r=mid-1;
}else if(nums[mid]<=target){
l=mid+1;
right = l ;
}
}
return right;
}
int searchleft(vector<int>& nums,int target){
int l = 0;
int r = nums.size() -1;
int mid = 0;
int left = -2;
while(l<=r){
mid = l + (r-l)/2;
if(nums[mid]>=target){
r = mid -1;
left = r ;
}else if(nums[mid]<target){
l=mid+1;
}
}
return left;
}
};
一些需要注意的,right和left不要包含目标的值,不然会导致target在区间的情况被忽略,这里是利用了区间长度来判断target是否被包含,如果区间不包含target值,会被那么值一定是等于1的(这里没有讨论target在区间外的情况),如果target在区间外,那么left和right必然有个值没有变化过,同时要注意到,因为left取值有可能到-2,所以right的取值一定要小于-1