Search for a Range
class Solution {
public:
int findLastPosition(vector<int>& nums, int target){
int len = nums.size();
int left = 0,right = len-1;
while(left +1 < right){
int mid = left + (right - left)/2;
if(target == nums[mid]){
left = mid;
}
else if(target > nums[mid]){
left = mid;
}
else{
right = mid;
}
}
// notice right is first
if(target == nums[right]){ return right;}
if(target == nums[left]){ return left;}
return -1;
}
int findFirstPosition(vector<int>& nums, int target){
int len = nums.size();
int left = 0,right = len-1;
while(left +1 < right){
int mid = left + (right - left)/2;
if(target == nums[mid]){
right = mid;
}
else if(target > nums[mid]){
left = mid;
}
else{
right = mid;
}
}
//notice left is first
if(target == nums[left]){ return left;}
if(target == nums[right]){ return right;}
return -1;
}
vector<int> searchRange(vector<int>& nums, int target) {
int last = findLastPosition(nums,target);
int first = findFirstPosition(nums,target);
vector<int> v;
v.push_back(first);
v.push_back(last);
return v;
}
};