经典多次二分法!
package Level4;
import java.util.Arrays;
/**
* Search for a Range
*
* 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].
*
* For example, Given [5, 7, 7, 8, 8, 10] and target value 8, return [3, 4].
*
*/
public class S34 {
public static void main(String[] args) {
int[] A = {5,8,8,8,8,8,8,8,8,10};
int[] ret = searchRange(A, 10);
System.out.println(Arrays.toString(ret));
}
public static int[] searchRange(int[] A, int target) {
int[] ret = {Integer.MAX_VALUE, Integer.MIN_VALUE};
rec(A, target, ret, 0, A.length-1);
if(ret[0] == Integer.MAX_VALUE){
ret[0] = -1;
}
if(ret[1] == Integer.MIN_VALUE){
ret[1] = -1;
}
return ret;
}
// 先用二分法找到满足条件