Я беседовал с 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). Спасибо.