я получил эту проблему во время телефонного интервью:Python список манипуляция: Учитывая список диапазонов номеров, возвращает список объединенных диапазонов
Предположим, что существует список диапазонов. Например, [[1-6], [10-19], [5-8]]. Напишите функцию, которая возвращает список комбинированных диапазонов , так что вход [[1-6], [10-19], [5-8]] возвращается к функции [[1,8], [10,19 ]] (только начальный и конечный номера). Обратите внимание: список ввода может содержать произвольное количество диапазонов .
Мое решение этой проблемы:
Объединить весь список диапазона в один список: [[1-6], [10-19], [5-8]] -> [1-6,10-19,5-8]
Выполнение сортировки по списку: list = Сортировка (список) -> [1,2,3,4,5,5,6,6, 7,8,10 ...]
Использовать list = set (list), чтобы избавиться от избыточных чисел
Итерация по списку и найти диапазон
Я знаю, что это решение, безусловно, то, что они ищут (вот почему я провалил интервью ужасно) как время сложности O (NlogN) (сортировка), n - количество различных чисел в диапазоне.
Можете ли вы, эксперт python, дать решение O (n), n как количество диапазонов в исходном списке?
может ли быть пустые диапазоны? – schwobaseggl
Вы имели в виду сказать, что это определенно ** не **, что они ищут? –
Каково максимальное значение чисел в диапазоне, например, если диапазон [x, y] является максимальным значением x и y? Если это меньше, вы можете сделать это в O (max_val (x)) –