Я пытаюсь решить следующую проблему. Учитывая массив действительных чисел [7, 2, 4, 8, 1, 1, 6, 7, 4, 3, 1]
для каждого элемента, мне нужно найти последний предыдущий более крупный элемент в массиве.предыдущий последний более крупный элемент в массиве
Например, нет ничего большего, чем первый элемент (7), поэтому он имеет NaN. Для второго элемента (2) 7 больше. Таким образом, в конце ответ выглядит так:
[NaN, 7, 7, NaN, 8, 8, 8, 8, 7, 4, 3, 1]
. Конечно, я могу просто проверить все предыдущие элементы для каждого элемента, но это квадратично по количеству элементов массива.
Мой другой подход состоял в том, чтобы сохранить отсортированный список предыдущих элементов, а затем выбрать первый элемент, который больше, чем текущий. Это звучит как линейный для меня журнал (я не уверен). Есть ли лучший способ подойти к этой проблеме?
Сортировка 'O (nlogn)' not 'O (logn)'. Я думаю, что «O (nlogn)» - лучший подход. – levi
@levi Я думал, что log linear is O (nlogn) – randomizer
Для каждого номера вам просто нужно найти * some * предыдущий номер, который был больше или он должен быть самым последним * большим номером? В первом случае это легко выполнимо в O (n) – HugoRune