public class Solution {
public int binarySearchFirst(int[] A, int target){
int l = 0, h = A.length - 1;
int p = -1;
while(l <= h){
int mid = l + ((h - l) >> 1);
if(target <= A[mid]){//注意这个等号,尽量要往小的方向走
h = mid - 1;
if(A[mid] == target &&(p == -1 || p > mid )){
p = mid;//记录需要输出的值,如果有多个相等的,取小的。
}
}
else {
l = mid + 1;
}
}
return p;
}
public int binarySearchLast(int[] A, int target){
int l = 0, h = A.length - 1;
int p = -1;
while(l <= h){
int mid = l + ((h - l) >> 1);
if(target >= A[mid]){//往大的方向走
l = mid + 1;
if(A[mid] == target && p < mid){
p = mid;
}
}
else{
h = mid - 1;
}
}
return p;
}
public int[] searchRange(int[] A, int target) {
int[] ans = new int[2];
ans[0] = binarySearchFirst(A, target);
ans[1] = binarySearchLast(A, target);
return ans;
}
}
【LeetCode】Search for a Range
最新推荐文章于 2018-09-05 14:58:19 发布