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,
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].
分析:
利用上一题中,Search Insert Position的方法,寻找 lowVal = target-0.5 和 highVal = target+0.5 的位置low 和 high,
如果 low == high, 就是没有找到,
否则,结果就是 [ low, high-1].
public class Solution {
public int[] searchRange(int[] A, int target) {
int[] res = {-1,-1};
float lowVal = (float)(target-0.5);
float highVal = (float)(target+0.5);
int low = searchInsert(A, lowVal);
int high = searchInsert(A, highVal);
if(low != high){
res[0] = low;
res[1] = high-1;
}
return res;
}
public int searchInsert(int[] A, float target) {
//二分查找
return searchInsert(A, target, 0, A.length-1);
}
public int searchInsert(int[] A, float target, int start, int end){
if(target < A[start]) return start;
if(target > A[end]) return end+1;
int mid = (start+end)/2;
if(target == A[mid]) return mid;
if(target < A[mid])
return searchInsert(A, target, start, mid-1);
else
return searchInsert(A, target, mid+1, end);
}
}