Рискну предположить, я вижу это так:
0. Берем данные в массив, сортируем массив по дате.
1. Берем самую малую дату - аэропорт вылета (SVO), запоминаем в переменную
2. Берем самую большую дату - аэропорт прелета. (DME), запоминаем в переменную
3. Далее (понимаем, что оба аэропорта в Москве, и бомжуем 9 дней.) - т.е. break; (если мы берем под "долгий" - время, а не "время полетов") Если нет, то:
4. Первый элемент массива = первый рейс в любом случае, берем аэропорт прилета.
5. Перебор массива по порядку со второго элемента (key = 1, а не 0), проверяем все элементы на условие "если аэропорт вылета = последнему аэропорту прилета", если таких несколько, то рекурсия этой же функции (строим несколько маршрутов в этом случае) и так до конца, пока не выполнятся все рекурсии.
6. после Берем все собранные маршруты, смотрим, если последний аэропорт не соответствует данным из пункта 2 (аэропорт прилета - DME) - то удаляем эти маршруты.
7. Из оставшихся смотрим, какой из маршрутов имеет больше рейсов и\или чья дата последнего рейса больше (зависит от того, что мы берем под "долгий" - время полета или количество рейсов)
Не претендую на самое оптимальное решение, наверное, если включить какую математику, то, возможно, можно сделать анализ быстрее\лучше\красивее.