Я изучаю тест и нашел этот вопрос.
Вам предоставляется отсортированный массив целых чисел, например:
{-5, -5, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 67, 67, 99}
Напишите метод:
Public static int count (int[] a, int x)
который возвращает количество раз, число 'x' находится в массиве.
например:
x = -5, it returns 2
x = 2, it returns 5
x = 8, it returns 0
Мне нужно написать это как можно эффективнее, пожалуйста, не дайте мне ответа (или напишите, если хотите, но я не буду смотреть), моя идея - сделать двоичный поиск, а затем перейдите оба края (назад и вперед) значения, которое я нахожу, и с номерами индексов верну правильный ответ, мои вопросы:
- Это наиболее эффективный способ?
- не будет ли O (n) в худшем случае? (когда массив заполняется одним номером) -
Если так - тогда зачем мне бинарный поиск?