Выбор ответа Middle Интервалы обновлено

Слияние: ошибка с концом

Вопрос

Что вернёт функция для [[1,10],[2,3],[4,5]] и в чём ошибка?

function merge(iv) {
  iv.sort((a, b) => a[0] - b[0]);
  const res = [iv[0]];
  for (const cur of iv.slice(1)) {
    const last = res.at(-1);
    if (cur[0] <= last[1]) last[1] = cur[1];
    else res.push(cur);
  }
  return res;
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: [[1, 3], [4, 5]]. Ошибка в last[1] = cur[1]: нужно Math.max(last[1], cur[1]). [2,3] лежит внутри [1,10], но перезаписывает конец, и выходит [1,3].

Варианты ответа

  1. [[1, 10]]
  2. [[1, 3], [4, 5]]правильный ответ
  3. [[1, 5]]
  4. [[1, 10], [4, 5]]

Разбор

Ошибка в last[1] = cur[1]: нужно Math.max(last[1], cur[1]). [2,3] лежит внутри [1,10], но перезаписывает конец, и выходит [1,3]. Затем 4 > 3, и [4,5] добавляется отдельно: [[1, 3], [4, 5]]. Правильный ответ был бы [[1, 10]].

  • [[1, 10]] вернула бы исправленная версия.
  • [[1, 5]] получилось бы, если бы [4,5] тоже слился.
  • [[1, 10], [4, 5]]: конец первого интервала всё же перезаписан.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.