34. Search for a Range
Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order ofO(logn).
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 int[] searchRange(int[] nums, int target) {
int[] range = {nums.length, -1};
searchRange(nums, target, 0, nums.length - 1, range);
if (range[0] > range[1]) range[0] = -1;
return range;
}
public void searchRange(int[] nums, int target, int lo, int hi, int[] range){
if (lo>hi) return;
int mid = (lo+hi)/2;
if (nums[mid]==target){
if (mid<range[0]){
range[0] = mid;
searchRange(nums,target,lo,mid-1,range);
}
if (mid>range[1]){
range[1] = mid;
searchRange(nums,target,mid+1,hi,range);
}
}else if(nums[mid]<target){
searchRange(nums,target,mid+1,hi,range);
}else if(nums[mid]>target){
searchRange(nums,target,lo,mid-1,range);
}
}
}