leetcode34. Search for a Range
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> result = {};
if(nums.size()<1){
result.push_back(-1);
result.push_back(-1);
return result;
}
if(nums.size()==1){
if(nums[0] == target){
result.push_back(0);
result.push_back(0);
}else{
result.push_back(-1);
result.push_back(-1);
}
return result;
}
int left = 0;
int right = nums.size() - 1;
int medium = left+(right - left) / 2;
left = searchLeftPos(nums,target,left,medium);
right = searchRightPos(nums,target,medium+1,right);
if(left == -1){
left = searchLeftPos(nums,target,medium+1,right);
}
if(right == -1){
right = searchRightPos(nums,target,left,medium);
}
result.push_back(left);
result.push_back(right);
return result;
}
int searchLeftPos(vector<int>& nums, int target,int left, int right){
if(right<=left){
if(target==nums[left]) return left;
else return -1;
}
int medium = left+(right - left) / 2;
left = searchLeftPos(nums,target,left,medium);
if(left == -1){
left = searchLeftPos(nums,target,medium+1,right);
}
return left;
}
int searchRightPos(vector<int>& nums, int target,int left, int right){
if(right<=left){
if(target==nums[left]) return left;
else return -1;
}
int medium = left+(right - left) / 2;
right = searchRightPos(nums,target,medium+1,right);
if(right == -1){
right = searchRightPos(nums,target,left,medium);
}
return right;
}
};