Сортировка

Очередь по росту

Восстановить порядок людей по росту и количеству высоких перед ними

Средний

Постановка задачи

Описание (LeetCode - 406. Queue Reconstruction by Height)

Дан массив people, где people[i] = [hi, ki]:

  • hi - рост i-го человека.
  • ki - количество людей перед ним в очереди с ростом не меньше hi.

Нужно восстановить очередь и вернуть массив людей в правильном порядке.

Гарантируется, что ответ существует.

Пример 1:

people = [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

Результат:

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

Пояснение:

  • Элемент [5,0] на позиции 0: перед ним нет людей выше или такого же роста.
  • Элемент [7,0] на позиции 1: перед ним нет людей выше или такого же роста.
  • Элемент [5,2] на позиции 2: перед ним находятся два человека выше или такого же роста ([5,0] и [7,0]).
  • Элемент [6,1] на позиции 3: перед ним находится один человек выше ([7,0]).
  • Элемент [4,4] на позиции 4: перед ним находятся четыре человека выше или такого же роста ([5,0], [7,0], [5,2] и [6,1]).
  • Элемент [7,1] на позиции 5: перед ним находится один человек такого же роста ([7,0]).

Пример 2:

people = [[6,0], [5,0], [4,0], [3,2], [2,2], [1,4]]

Результат:

[[4,0], [5,0], [2,2], [3,2], [1,4], [6,0]]

Ограничения:

  • 1 <= people.length <= 2000
  • 0 <= hi <= 10⁶
  • 0 <= ki < people.length
  • Гарантируется, что очередь можно восстановить.

Решение

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

Перейдите на Premium, чтобы продолжить

Разблокируйте доступ к этой статье и всем остальным материалам с NowInterview Premium

Перейти на Premium