Упорядоченный рендер сообщений (Ordered Message Rendering)
3
Очередь
Кэширование
Условие:
В чат-приложение сообщения приходят с сервера в произвольном порядке, но должны отображаться (рендериться) строго по возрастанию id, начиная с id = 1, без пропусков.
Каждое сообщение имеет вид:
{ id: number, text: string }Дана последовательность сообщений в том порядке, в котором они пришли с сервера (может не совпадать с порядком id). Необходимо определить порядок, в котором сообщения были бы фактически отрендерены: сообщение рендерится немедленно при получении, если оно является следующим по очереди (т.е. его id на 1 больше id последнего отрендеренного сообщения), либо буферизуется в ожидании более ранних сообщений. Как только приходит недостающее сообщение, из буфера последовательно "дорендериваются" все сообщения, которые становятся доступны по порядку.
Напишите функцию, которая принимает массив пришедших сообщений (в порядке прихода) и возвращает массив id в том порядке, в котором они были бы отрендерены.
Входные данные:
messages— массив объектов{ id: number, text: string }, представляющий порядок прихода сообщений с сервера
Выходные данные:
Массив чисел — id сообщений в порядке их рендеринга (всегда возрастающая последовательность 1, 2, 3, ... до количества сообщений).
Ограничения:
1 <= messages.length <= 1000Все id уникальны и образуют непрерывную последовательность от 1 до
messages.lengthtext— непустая строка (для теста несущественна)
Пример:
Вход: [{id:1,text:"a"},{id:2,text:"b"},{id:3,text:"c"}]
Выход: [1, 2, 3]
Вход: [{id:3,text:"c"},{id:1,text:"a"},{id:2,text:"b"}]
Выход: [1, 2, 3]
Вход: [{id:2,text:"b"},{id:4,text:"d"},{id:1,text:"a"},{id:3,text:"c"},{id:5,text:"e"}]
Выход: [1, 2, 3, 4, 5]