class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int res1 = binary_search1(nums,nums.size(),target);
int res2= binary_search2(nums,nums.size(),target);
return {res1, res2};
}
int binary_search1(const std::vector<int>& q ,int len ,int x){
int l = -1,r = len;
while(l+1<r){
int mid = (l+r)/2;
if(isBlue1(q[mid],x)){
l = mid;
} else{
r = mid;
}
}
if(r < len && q[r] ==x) return r;
return -1;
}
bool isBlue1(int num,int x){
return num<x;
}
int binary_search2(const std::vector<int>& q, int len,int x){
int l=-1,r=len;
while(l+1<r){
int mid=(l+r)/2;
if(isBlue2(q[mid],x)){
l=mid;
}else{
r=mid;
}
}
if(l>=0 && q[l]==x) return l;
return -1;
}
bool isBlue2(int num,int x){
return num<=x;
}
};
c++算法实现,通过蓝红边界,判断题目所需条件是在边界线以左还是以右,isBlue中的条件就是都是<或者<=某个数