> Как реализовать построение полного маршрута из массива билетов в React (React)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: VK

Стек: React

> Пример ответа

Для реализации построения полного маршрута из массива билетов в React можно использовать следующий подход:

  1. Структура данных: Представим билеты как объекты с полями from и to.

  2. Алгоритм: Используем хеш-таблицу (Map) для быстрого поиска. Сначала строим словарь from -> to, затем находим начальную точку (город, который есть в from, но отсутствует в to).

  3. Реализация:

JSX
import { useState, useMemo } from 'react';
const buildRoute = (tickets) => {
const fromMap = new Map();
const toSet = new Set();
tickets.forEach(({ from, to }) => {
fromMap.set(from, to);
toSet.add(to);
});
// Находим начальный город
let start = null;
for (const [from] of fromMap) {
if (!toSet.has(from)) {
start = from;
break;
}
}
// Строим маршрут
const route = [];
let current = start;
while (current) {
route.push(current);
current = fromMap.get(current);
}
return route;
};
const RouteBuilder = ({ tickets }) => {
const route = useMemo(() => buildRoute(tickets), [tickets]);
return (
<div>
<h3>Маршрут:</h3>
<ul>
{route.map((city, index) => (
<li key={index}>
{city}
{index < route.length - 1 && ' → '}
</li>
))}
</ul>
</div>
);
};

Ключевые моменты:

  • Используем useMemo для оптимизации пересчета маршрута при изменении билетов.

  • Алгоритм работает за O(n), где n - количество билетов.

  • Обрабатываем случай, когда билеты образуют корректный маршрут (без циклов и разрывов).

Пример использования:

JSX
const tickets = [
{ from: 'Москва', to: 'Санкт-Петербург' },
{ from: 'Казань', to: 'Москва' },
{ from: 'Санкт-Петербург', to: 'Владивосток' }
];
// Результат: ['Казань', 'Москва', 'Санкт-Петербург', 'Владивосток']

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью