這題其實就是把左右分開來找,
但會遇到一個麻煩
就是當你先找left, 可能會發生left太大根本不存在在這個list
所以你得卡一個left == num.size() 必須要直接結束
再來就是找right剛好相反過來, 可能這個值過小, right == -1時也可以直接return
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int l = 0;
int r = nums.size() - 1;
int left = 0;
int right = 0;
while(l<=r){
int mid = l + (r - l) /2;
// find left
if(nums[mid] == target){
r = mid - 1;
}else if (nums[mid] < target){
l = mid + 1;
}else{
r = mid - 1;
}
}
if(l == nums.size() || nums[l] != target){
return { -1, -1};
}else{
left = l;
}
l = 0; r = nums.size() - 1;
while(l<=r){
int mid = l + (r - l) /2;
// find right
if(nums[mid] == target){
l = mid + 1;
}else if (nums[mid] < target){
l = mid + 1;
}else{
r = mid - 1;
}
}
if(r == -1 || nums[r] != target){
return {-1, -1};
}else{
right = r;
}
return {left, right};
}
};