Given an array of integers nums
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 of O(log n).
If the target is not found in the array, return [-1, -1]
.
Example 1:
Input: nums = [5,7,7,8,8,10]
, target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10]
, target = 6
Output: [-1,-1]
折半查找 :
public int[] searchRange(int[] nums, int target) {
if(nums ==null || nums.length<=0) {
return new int[] {-1,-1};
}
int begin=0;
int end = nums.length-1;
int small = -1;
int big = -1;
while(begin <= end) {
int mid = (begin+end)/2;
if(nums[mid] == target) {
small = mid;
big = mid;
int tmpSmall = small;
int tmpBig = big;
while(tmpSmall >=0 && nums[--tmpSmall]==target) {
small = tmpSmall;
}
while(tmpBig<nums.length && nums[++tmpBig]== target) {
big = tmpBig;
}
return new int[]{small,big};
}else if(nums[mid]>target){
end = mid-1;
}else {
begin=mid+1;
}
}
return new int[] {small,big};
}