Слияние двух массивов

Сливайте массивы с конца, каждый раз выбирая больший id. Остановитесь после k элементов или исчерпания обоих списков: полная сортировка не нужна.

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

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

Сливайте массивы с конца, каждый раз выбирая больший id. Остановитесь после k элементов или исчерпания обоих списков: полная сортировка не нужна.

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

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

Условие

Есть два сервиса которые возвращают список активных заявок на кредит отсортированных по возрастанию id, id - сквозное для обоих сервисов, необходимо получить список из k последних заявок на кредит:


 const getDecisions1 = [
    {id: 1, result: 'approved'},
    {id: 3, result: 'waiting'},
    {id: 15, result: 'approved'},
    {id: 20, result: 'approved'},
    {id: 26, result: 'waiting'},
    {id: 30, result: 'approved'},
];

const getDecisions2 = [
    {id: 2, result: 'approved'},
    {id: 4, result: 'waiting'},
    {id: 14, result: 'approved'},
    {id: 16, result: 'approved'},
    {id: 23, result: 'waiting'},
    {id: 32, result: 'approved'},
];

const getLastDecision - (decision1, decision2, k) -> {
}

getLastDecision(getDecisions1.getDecisions2, 5) //

//[ 
// {id: 32, result: 'approved'},
// {id: 30, result: 'approved'},
// {id: 26, result: 'waiting'},
// {id: 23, result: 'waiting'},
// {id: 20, result: 'approved'}

Ответ

Сливайте массивы с конца, каждый раз выбирая больший id. Остановитесь после k элементов или исчерпания обоих списков: полная сортировка не нужна.

function getLastDecision(a, b, k) {
  if (!Number.isInteger(k) || k < 0) throw new RangeError('Неверный k');
  let i = a.length - 1, j = b.length - 1;
  const result = [];
  while (result.length < k && (i >= 0 || j >= 0)) {
    if (j < 0 || (i >= 0 && a[i].id > b[j].id)) result.push(a[i--]);
    else result.push(b[j--]);
  }
  return result;
}

Вызов должен быть getLastDecision(getDecisions1, getDecisions2, 5), результат — id 32,30,26,23,20. Предполагаются уникальные сквозные id и возрастание каждого входа; «последние» трактуются как наибольшие id. Время O(min(k,n+m)), память такого же порядка для результата. Входы не меняются.

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

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

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

Подробнее