Я беседовал с Amazon несколько дней назад. Я не мог ответить на один из вопросов, которые меня попросили удовлетворить. Я попытался получить ответ после интервью, но до сих пор я не был успешным. Вот вопрос:
У вас есть массив целых чисел размера n. Вам предоставляется параметр k
где k < n
. Для каждого сегмента последовательных элементов размера k
в массиве вам нужно вычислить максимальное значение. Вам нужно только вернуть минимальное значение этих максимальных значений.
Например, если указано 1 2 3 1 1 2 1 1 1
и k = 3
, ответ будет 1
.
Сегменты будут 1 2 3
, 2 3 1
, 3 1 1
, 1 1 2
, 1 2 1
, 2 1 1
, 1 1 1
.
Максимальные значения в каждом сегменте: 3
, 3
, 3
, 2
, 2
, 2
, 1
.
Минимум этих значений 1
, поэтому ответ 1
.
Лучший ответ, который я придумал, - это сложность O (n log k). Я создаю двоичное дерево поиска с помощью первых элементов k
, получаю максимальное значение в дереве и сохраняю его в переменной minOfMax
, затем циклически объединяем один элемент за один раз с оставшимися элементами в массиве, удаляем первый элемент предыдущего сегмента из дерева двоичного поиска, вставьте последний элемент нового сегмента в дерево, получите максимальный элемент в дереве и сравните его с minOfMax
, оставив в minOfMax
минимальное значение двух.
Идеальный ответ должен быть сложным O (n). Спасибо.