给定一个排好序的整数数组以及某个值n。查找值n的起始和终止位置。如:{0, 0, 1, 1, 1, 5, 5, 6, 6, 6, 6, 7, 11},n=5,输出{5, 6}。要求时间复杂度小于O(n)。
void fun(int a[], int len, int n)
{
int left = 0;
int right = len-1;
while (left < right-1)
{
int mid = left + ((right-left)>>1);
if (a[mid] == n)
{
right = mid;
}
else if (a[mid] > n)
{
right = mid-1;
}
else
{
left = mid+1;
}
}
if (a[left] == n)
{
cout << "left is " << left << endl;
}
else if (a[right] == n)
{
cout << "left is " << right << endl;
}
else
{
cout << "left not found" << endl;
}
left = 0;
right = len-1;
while (left < right-1)
{
int mid = left + ((right-left)>>1);
if (a[mid] == n)
{
left = mid;
}
else if (a[mid] > n)
{
right = mid-1;
}
else
{
left = mid+1;
}
}
if (a[right] == n)
{
cout << "right is " << right << endl;
}
else if (a[left] == n)
{
cout << "right is " << left << endl;
}
else
{
cout << "right not found" << endl;
}
}