Группировка объектов по code с порядком из второго массива

Сгруппируйте объекты a по code, затем обходите b и выдавайте группу только при первом появлении кода. Так сохранятся все подходящие объекты из a.

Короткий ответ

Что ответить на собеседовании

Сгруппируйте объекты a по code, затем обходите b и выдавайте группу только при первом появлении кода. Так сохранятся все подходящие объекты из a.

Подробный разбор

Ответ с пояснениями

Условие

Условие: Даны два массива объектов. Каждый объект содержит числовое поле code. Верните новый массив, содержащий все объекты из массива a, для которых в массиве b найдётся объект с таким же значением поля code. Порядок элементов в результате определяется порядком элементов в массиве b: объекты из a должны располагаться в том порядке, в каком встречается соответствующий code в b. Если в b встречается несколько одинаковых code, учитывается только первое вхождение.

Входные данные:

  • a — массив объектов вида { code: number, ...rest }, длина от 0 до 10^5
  • b — массив объектов вида { code: number, ...rest }, длина от 0 до 10^5

Выходные данные: Массив объектов из a, отфильтрованных и упорядоченных по первому вхождению соответствующего code в b.

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

  • 0 <= a.length, b.length <= 100 000
  • Поле code — целое неотрицательное число
  • В массиве b могут быть дубликаты code — учитывается только первое вхождение

Пример функции:

# Доступно без импорта: json, sys, io

def intersect_by_code(a, b):
    # TODO: напишите решение здесь
    return []

Ответ

Сгруппируйте объекты a по code, затем обходите b и выдавайте группу только при первом появлении кода. Так сохранятся все подходящие объекты из a.

Внутри одной группы оставляем исходный порядок a:

def intersect_by_code(a, b):
    groups = {}
    for item in a:
        groups.setdefault(item['code'], []).append(item)
    result = []
    for item in b:
        result.extend(groups.pop(item['code'], ()))
    return result

pop одновременно получает группу и исключает её повторную выдачу при дубликатах в b. Входные массивы и объекты не изменяются; новый список содержит ссылки на исходные объекты a. Ожидаемое время O(len(a)+len(b)), память O(len(a)) с учётом групп и результата.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее