所以我遇到了一个巨大的障碍......也许只是因为我的逻辑不存在,但我似乎无法自己解决这个问题。
我正在尝试修改BinarySearch
,以便获得两个索引。
第一个索引是给定数字 x 的最左侧索引和最右侧。如果该数字不存在,则生成 [-1,-1]。
无论如何。我一直在尝试修改 BinarySearch,但似乎无法使其正常工作。任何指针将不胜感激。
public static Pair BinarySearchDup(int[] A, int x, int low, int high){
int mid = (low + high) / 2;
int left = -1, right = -1;
while(low <= high){
mid = (low + high) / 2;
if(A[mid] == x){
int newMid = mid;
//check left
if(left == -1){
left = mid;
return BinarySearchDup(A, x, low, mid - 1);
}
else if(right == -1){
right = mid;
return BinarySearchDup(A, x, newMid + 1, high);
}
return new Pair(left, right);
}
else if(A[mid] < x)
return BinarySearchDup(A, x, mid + 1, high);
else// (A[mid] > x)
return BinarySearchDup(A, x, low, mid - 1);
}
//if there are no matches of the number then it returns -1
return new Pair(-1, -1);
}