Здравствуйте, Аноним, Вы писали:
А>Здравствуйте коллеги, такая задача
А>есть отсортированная последовательность типа
А>0,1,5,6,6,6,6,6,7
А>нужно за логарифмическое время найти первый элемент равный либо 6 (то есть после 5 — кой) и последний (перед 7 — кой)
А>я попробовал реализовать так бинарно ищу последний меньший/больший если он не равен искомому ключу то возвращаю его, если но равен ключу, то запускаю снова бинарный "подпоиск" на интервале от начало/конца массива до этого элемента если "под поиск" больше не нашел ключей то возвращаю первое найденное значение иначе повторяю рекурсивно.
А>Но не нравиться сам реализация с под. поисками, возможно есть другие решения.
А ничего и не надо делать
На каждом шаге алгоритма мы должны сузить интервал, так?
Мы взяли какой-то элемент внутри существующего интервала, и если он меньше искомого, то берем правую часть.
А вот если меньше или равен искомому — то левую. Таким образом — если мы попадаем на 6-ку и ищем 6, то всегда будем двигаться к самой левой шестерке, ведь 6 <= 6, а значит мы выбираем левый интервал, пока не дойдем до самой левой 6-ки.