34. Find First and Last Position of Element in Sorted Array

ss
2 min readFeb 12, 2022

--

這題其實就是把左右分開來找,

但會遇到一個麻煩

就是當你先找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};

}
};

--

--

ss
ss

No responses yet