题目要求:
Given a sorted array of integers, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
示例:
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
#include<stdafx.h>
#include <iostream>
#include<vector>
using namespace std;
class Solution {
public:
vector<int> searchInsert(int A[], int n, int target)
{
int low=0;
int high=n-1;
vector<int> B;
int cur1=searchindexl(A,low,high,target);
int cur2=searchindexh(A,low,high,target);
B.push_back(cur1);
B.push_back(cur2);
return B;
}
//获取左边位置
int searchindexl(int A[],int low,int high,int target)
{
int cur;
int tcur=-1;
while(low<=high)
{
cur= (low+high)/2;
if(target<A[cur]){
high=cur-1;
}
else if(target>A[cur]){
low=cur+1;
}
else if(target==A[cur]){
tcur=cur;
high=cur-1;
}
}
return tcur;
}
//获取右边位置
int searchindexh(int A[],int low,int high,int target)
{
int cur; int tcur=-1;while(low<=high)
{
cur= (low+high)/2;
if(target<A[cur])
{
high=cur-1;
}
else if(target>A[cur])
{
low=cur+1;
}
else if(target==A[cur])
{
tcur=cur;low=cur+1;
}
}
return tcur;
}
};
void main()
{
int A[6]={5, 7, 7, 8, 8, 10};
Solution s;
vector<int> B=s.searchInsert(A,6,7);
cout<<B[0]<<","<<B[1]<<endl;
getchar();
}