个人思路总结:
这个题和33题其实是一样的,也需要用二分+递归来做。只不过和33题相比需要考虑的情况复杂一些。
代码如下:
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int len = nums.size();
vector<int> vec;
int left=-1, right=-1;
search_left(nums,0,len-1,target,left);
search_right(nums,0,len-1,target,right);
if(left==right==-1)
{
vec.push_back(-1);
vec.push_back(-1);
}
else
{
vec.push_back(left);
vec.push_back(right);
}
return vec;
}
void search_left(vector<int>& nums, int i, int j, int target,int& left)
{
int mid = (i+j)/2;
if(i>j)
return;
if(nums[mid]==target)
{
left = mid;
search_left(nums,i,mid-1,target,left);
}
else if(nums[mid]>target)
{
search_left(nums,i,mid-1,target,left);
}
else
{
search_left(nums,mid+1,j,target,left);
}
}
void search_right(vector<int>& nums, int i, int j, int target,int& right)
{
int mid = (i+j)/2;
if(i>j)
return;
if(nums[mid]==target)
{
right = mid;
search_right(nums,mid+1,j,target,right);
}
else if(nums[mid]>target)
{
search_right(nums,i,mid-1,target,right);
}
else
{
search_right(nums,mid+1,j,target,right);
}
}
};