34. 在排序数组中查找元素的第一个和最后一个位置
思路:题目要求了log级别的时间复杂度,,,思路1,两个指针走两头这个直接无了,时间复杂度是n,思路2,二分查找在时间复杂度上是log,二分有两种写法,第一种是循环写,第二种是递归写,这里选择的是递归写。
class Solution {
public:
void emm(vector<int> &nums,int left,int right,int target,int &a,int &b){
if(left>right) return;
int mid=(left+right)/2;
if(nums[mid]==target){
if(mid <a) a=mid;
if(mid> b) b=mid;
emm(nums,left,mid-1,target,a,b);
emm(nums,mid+1,right,target,a,b);
}
else if(nums[mid]<target)
emm(nums,mid+1,right,target,a,b);
else
emm(nums,left,mid-1,target,a,b);
}
vector<int> searchRange(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
int ans1=nums.size(),ans2=-1;
emm(nums,left,right,target,ans1,ans2);
if(ans1!=nums.size() && ans2!=-1) return {ans1,ans2};
return {-1,-1};
}
};