public class {
public int[] searchRange(int[] nums, int target) {
int left = leftSearch(nums,0, nums.length-1,target);
int right = rightSearch(nums,0, nums.length-1,target);
return new int[]{left, right};
}
public int leftSearch(int[] nums, int left, int right, int target) {
if(left > right) {
return -1;
}
int mid = left + (right - left) / 2;
if(nums[mid] == target ) {
if(mid - 1 < left) {
return mid;
} else {
if(nums[mid - 1] < target ) {
return mid;
} else {
return leftSearch(nums, left, mid - 1, target);
}
}
}
if(nums[mid] > target ) {
return leftSearch(nums, left, mid - 1, target);
} else {
return leftSearch(nums, mid + 1, right, target);
}
}
public int rightSearch(int[] nums, int left, int right, int target) {
if(left > right) {
return -1;
}
int mid = left + (right - left) / 2;
if(nums[mid] == target ) {
if(mid + 1 > right) {
return mid;
} else {
if(nums[mid + 1] > target ) {
return mid;
} else {
return rightSearch(nums, mid+1, right, target);
}
}
}
if(nums[mid] > target ) {
return rightSearch(nums, left, mid - 1, target);
} else {
return rightSearch(nums, mid + 1, right, target);
}
}
}
近期评论