Next Greater Element

Albert Davletov
UniLecs
Published in
2 min readMar 28, 2021

Разбор

Испльзуя 1й и 2й массив можно создать хэш-таблицу, ктр будет содержать пары { элемент -> след.больший элемент }. Тогда задача будет выполнена. Но как создать такую таблицу за линейное время ?!

В этом нам может помочь стек. Итак идея в следующем.

  1. Проходим по 2му массиву и каждый текущий элемент кидаем в стек, но одновременно с этим будем заполнять хэш-таблицу следующим образом.
  2. Если текущий элемент 2го массива больше, чем посл.элемент стека, то обновляем хэш-таблицу: ключом теперь будет посл.элемент стека, а значением текущий элемент.
  3. После прохождения цикла по 2му массиву в стеке могут остаться элемент, для которых нет след.большего элемента, присваиваем им -1.
  4. После этого у нас будет готовая хэш-таблица, проходим по 1му массиву и формируем результирующий массив.

Основаная идея заключается в том, что элемент выскакивает из стека всякий раз, когда для него обнаруживается следующий больший элемент. Таким образом, в стеке остаются те элементы, для которых в массиве не существует следующего большего элемента.

Давайте посмотрим детали реализации ниже.

Реализация

C#

gist.github.com

Play-test

dotnetfiddle.net

--

--