Итак, я пишу метод двоичного поиска, чтобы найти позицию в массиве числа, присвоенного ей. Верните эту позицию. Поэтому каждый раз, когда я сравниваю число в массиве с тем, что я ищу, распечатайте позицию в массиве и число в этой позиции. Ее мой код до сих пор:Распечатайте позицию повторяющихся чисел в массиве
public static int binSearch(int[] arr, int key) {
int lo = 0;
int hi = array.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo)/2;
if (key < arr[mid]) {
hi = mid - 1;
} else if (key > arr[mid]) {
lo = mid + 1;
}
else {
return mid;
}
}
return -1;
}
public static void main(String[] arg) {
int[] array = new int[] { 0, 1, 2, 2, 2, 3, 3, 4};
for (int i = 0; i < array.length; i++) {
int index = Arrays.binarySearch(array, i);
System.out.println(array[i] + " at " + index);
}
}
Выход:
0 at 0
1 at 1
2 at 2
2 at 5
2 at 8
3 at 9
3 at 10
4 at -12
4 at 11
Мой ожидаемый результат будет
0 at 0
1 at 1
2 at 2
2 at 3
2 at 4
3 at 5
3 at 6
4 at 7
4 at 8
Спасибо за вашу помощь!
Есть в любом случае я еще могу использовать бинарный поиск, чтобы напечатать как ожидалось? Спасибо – BBKay
@Benj Почему вы хотите такую вещь. Даже если быть понятным, «линейный поиск» остановится, когда он найдет первое вхождение. Вы просто печатаете элемент, за которым следует индекс. Вам не нужно искать это – user7