#include<iostream>
#include<vector>
using namespace std;
class Solution1
{
public:
vector<int> findindex(vector<int>a,int target)
{
vector<int>res;
int first=0,last=a.size()-1;
while(first<last-1)
{
int mid=first+(last-first)/2;
if(a[mid]<target)
first=mid;
else
last=mid;
}
if(a[first]==target)
res.push_back(first);
else if(a[last]==target)
res.push_back(last);
else
res.push_back(-1);
first=0,last=a.size()-1;
while(first<last-1)
{
int mid=first+(last-first)/2;
if(a[mid]<=target)
first=mid;
else
last=mid;
}
if(a[first]==target)
res.push_back(first);
else if(a[last]==target)
res.push_back(last);
else
res.push_back(-1);
return res;
}
};
class Solution2
{
public:
Solution2():first(-1),last(-1){}
vector<int> findindex(vector<int>a,int target)
{
vector<int>res;
search(a,0,a.size()-1,target);
res.push_back(first);
res.push_back(last);
return res;
}
void search(vector<int>a,int l,int r,int target)
{
if(l>r)
return;
int mid=l+(r-l)/2;
if(a[mid]==target)
{
if(first==-1)
first=mid;
else
first=min(first,mid);
last=max(last,mid);
search(a,l,mid-1,target);
search(a,mid+1,r,target);
}
else if(a[mid]<target)
{
search(a,mid+1,r,target);
}
else
{
search(a,l,mid-1,target);
}
}
private:
int first,last;
};
void main()
{
Solution2 solution;
int a[]={1,5,5,5,8,14};
vector<int>arr(a,a+6);
vector<int>result;
result=solution.findindex(arr,5);
for(auto i:result)
cout<<i<<endl;
}
[leetcode]Search for a Range
最新推荐文章于 2018-09-05 14:58:19 发布