代码如下:
class Solution {
public int[] searchRange(int[] a, int key)
{
int x = left(a, key);
if(x == -1)
{
return new int[]{-1,-1};
}
else
{
return new int[]{x, right(a,key)};
}
}
public static int left(int test[], int key) // 得到最左边相等,和最右边算法一样
{
int i = 0, j = test.length;
int index = -1;
while(i < j)
{
int mid = i + j >> 1;
if(test[mid] == key)// 找到相等的了我们还要看看左边还有没有相等的
{
index = mid; // 有的话记录下标
j = mid;
}
else
if(test[mid] > key)
{
j = mid;
}
else
{
i = mid + 1;
}
}
return index;
}
public static int right(int test[], int key) // 得到最右边相等
{
int i = 0, j = test.length;
int index = -1; // 记录下标
while(i < j)
{
int mid = i + j >> 1;
if(test[mid] == key) // 找到相等的了我们还要看看右边还有没有相等的
{
index = mid;
i = mid + 1; // 所以这个i指针还要向左边找
}
else
if(test[mid] > key) // 大于的话还是向左边找
{
j = mid;
}
else // 小于的话还是向右边找
{
i = mid + 1;
}
}
return index;
}
}