Итак, я сталкиваюсь с огромным дорожным блоком .... возможно, это потому, что моей логики нет, но я не могу понять это самостоятельно.Измененный двоичный поиск java
Я пытаюсь изменить BinarySearch
так, что он получит два индекса.
Первый индекс представляет собой самый дальний левый индекс числа заданной, х, и самый дальний вправо. Если число не существует, оно производит [-1, -1].
Anyways. Я пытаюсь изменить 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);
}
Спасибо, но я только что поговорил с моим учителем и выяснил, что делаю это неправильно. Я должен был изменить итеративную версию BS ..., что делает вещи намного проще! – kevorski
@ Паташу Я не получил вашего ответа. Можете ли вы объяснить мне пример? Как вы попали в сложность O (logN)? Но сначала объясните, как работает ваш methos? –