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]
Java
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] myArray = new int[]{-1,-1};
int start = -1;
int end = -1;
int first = 0;
int last =nums.length-1;
int middle =0 ;
if(nums.length==0){
return myArray;
}
while (first+1 < last){
middle = first +(last-first)/2;
if(nums[middle]==target){
last = middle;
}
else if(nums[middle]>target){
last = middle;
}
else if(nums[middle]<target){
first = middle;
}
}
if(nums[first]==target){
start=first;
}
else if(nums[last]==target){
start=last;
}
else{
return myArray;
}
myArray[0]=start;
first = 0;
last =nums.length-1;
middle =0 ;
while (first+1 <last){
middle = first +(last-first)/2;
if(nums[middle]==target){
first = middle;
}
else if(nums[middle]>target){
last = middle;
}
else if(nums[middle]<target){
first = middle;
}
}
if(nums[last]==target){
end=last;
}
else if(nums[first]==target){
end=first;
}
else{
return myArray;
}
myArray[1]=end;
return myArray;
}
}