解题思路就是采用二分法查找,递归遍历,在找到目标值之后,先向左遍历得到左边界,再向右遍历得到右边界。
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);
}
}
}