[crosspost] Алгоритмическая задачка (гугл стайл)
находишь за логарифм место стыка. После этого за логарифм можешь искать элемент
находишь за логарифм место стыкаподробнее пожалуйста
Давайте общаться там, в стади =]
i=0, j=n
пока a[i] > a[j]
если a[(i+j)/2] > a[j] то i = (i+j)/2
иначе j= (i+j)/2
как-то так. Или у меня глюки?
А хотя там же написано по возрастанию, так что это верное решение для случая, когда все элементы различны, да =)
11121
когда ищем двойку
она ну никак не может быть возрастающей =)
чего лукавишь?
Ок. Для возрастающей всё работает за логарифм. Что с неубывающей?
С неубывающей очевидно O(n). Ибо ту самую одну единицу, не зная k, ты кроме как полным перебором найти не сможешь.
Ну тогда и спрашивай: есть массив из n-1 нулей и одной единицей. Найти за логарифм единицуИз этого поста разве не очевидно, что O(n)?
чего лукавишь?
Ок. Успокоился. Всем спасибо за участие (в стади тоже
Разве с неубывающим массивом в каких-то случаях, помимо равенства первого и последнего элементов, сложность деградирует с логарифма до O(n)?
Ну, формально нигде не сказано, что массив возрастающий, сказано, что он отсортирован по возрастанию.
Или массив [1, 2, 1] запрещается сортировать по возрастанию?
Оставить комментарий
Sebasten
Есть отсортированный (по возрастанию) массив целых чисел. Массив циклически сдвигают на К вправо. К мы не знаем.Надо найти алгоритм поиска элемента в этом массиве. Алгоритм должен иметь минимально возможную сложность.
Можно за логарифм?
Сначала запостил.