Given a sorted array of integers, 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]
.
For example,
Given [5, 7, 7, 8, 8, 10]
and target value 8,
return [3, 4]
.
Analysis:
Nothing special, use binary search according the the time complexity requirement, i.e. O(log n).
public class Solution {
public int[] searchRange(int[] A, int target) {
int[] rs = new int[2];
rs[0] = -1;
rs[1] = -1;
if(A.length == 0) return rs;
int left=0;
int right=A.length-1;
while(left<=right){
int mid = (left+right)/2;
if(A[mid]==target){
int i=mid;
int j=mid;
while(i>0&&A[i-1]==target&&i>=left) i--;
while(j<A.length-1&&A[j+1]==target&&i<=right) j++;
rs[0] = i;
rs[1] = j;
return rs;
}
else if(A[mid]<target) left = mid+1;
else right = mid-1;
}
return rs;
}
}
Remark: Be careful about the boundary cases handling.