Menu
CoddyTech

Non-overlapping Intervals

Тебе дан список интервалов в виде двух массивов: интервал i начинается в точке starts[i] и заканчивается в точке ends[i]. Удали как можно меньше интервалов, чтобы никакие два из оставшихся не пересекались. Два интервала, которые только соприкасаются, то есть один заканчивается ровно в той точке, где начинается другой, не пересекаются.

Напиши функцию с именем eraseOverlapIntervals, которая возвращает наименьшее количество интервалов, которое нужно удалить.

Функция

eraseOverlapIntervals(starts: integer-array, ends: integer-array) → integer
startsinteger-array
начало каждого интервала
endsinteger-array
конец каждого интервала, с тем же индексом, что и его начало
Возвращаетinteger
минимальное количество интервалов, которые нужно удалить, чтобы остальные не пересекались

Ограничения

  • 1 ≤ starts.length == ends.length ≤ 5000
  • -5 × 104 ≤ starts[i] < ends[i] ≤ 5 × 104
  • Интервалы не отсортированы. Два интервала могут быть одинаковыми.

Примеры

Ввод
starts = [3, 1, 5, 2]ends = [6, 4, 7, 3]
Вывод
2
Пояснение
В порядке начала интервалы идут так: [1,4], [2,3], [3,6] и [5,7]. Оставьте [2,3] и [3,6], которые только соприкасаются, и удалите остальные 2. Нельзя оставить три интервала: [1,4] пересекается с [2,3], а [3,6] пересекается с [5,7]; в любых трёх из четырёх найдётся одна из этих пар.

lock icon+17 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Предположим, у каждого интервала также есть значение, и вы хотите найти максимальную суммарную величину среди неперекрывающихся интервалов. По-прежнему ли сработает выбор интервала, который заканчивается раньше всех? Что бы вы использовали вместо этого?

Сбросить код
def eraseOverlapIntervals(starts, ends):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

starts = [3, 1, 5, 2]
ends = [6, 4, 7, 3]

Ожидается

2