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]
实现:二分查找
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] ret={-1,-1};
int left=0,right=nums.length-1;
while(left<=right){
int mid=(left+right)/2;
if(nums[mid]==target){
left=right=mid;
while(left>=0&&nums[left]==target){
left--;
}
while(right<=nums.length-1&&nums[right]==target){
right++;
}
ret[0]=left+1;
ret[1]=right-1;
return ret;
}else if(nums[mid]<target){
left=mid+1;
}else{
right=mid-1;
}
}
return ret;
}
}