解题思路就是采用二分法查找,递归遍历,在找到目标值之后,先向左遍历得到左边界,再向右遍历得到右边界。

public class Solution {

public ArrayList<Integer> searchRange (ArrayList<Integer> nums, int target) {
    // write code here
    if(nums==null){
        return nums;
    }
    ArrayList<Integer> result = new ArrayList<>(2);
    result.add(-1);
    result.add(-1);
    doSearchRange(nums,target,0,nums.size()-1,result);
    return result;
}

public void doSearchRange(ArrayList<Integer> nums, int target,int start,int end,ArrayList<Integer> result) {
    if(start>end){
        return;
    }
    int midIndex = (start+end)/2;
    int midValue = nums.get(midIndex);
    if(midValue>target){
        doSearchRange(nums,target,start,midIndex-1,result);
    } else if(midValue<target){
        doSearchRange(nums,target,midIndex+1,end,result);
    } else {
        int temp = midIndex-1;
        while (temp>=0&&nums.get(temp)==target){
            temp--;
        }
        result.set(0,temp+1);
        temp = midIndex+1;
        while (temp<= nums.size()-1&&nums.get(temp)==target){
            temp++;
        }
        result.set(1,temp-1);
    }
}

}