Ответ
Что хотят услышать интервьюеры
Интервьюеры ожидают увидеть ясное понимание работы с массивами и манипуляциями с ними. Важно продемонстрировать способность разбивать массив на последовательные диапазоны, а также писать чистый и читаемый код. Ожидается, что кандидат учтет крайние случаи, такие как пустой массив или массив с единственным элементом, и предложит эффективное решение.
def summarize_ranges(numbers):
# Проверяем, является ли массив пустым
if not numbers:
return ""
# Сортируем числа и убираем дубликаты
numbers = sorted(set(numbers))
ranges = [] # Список для хранения диапазонов
start = numbers[0] # Начало первого диапазона
for i in range(1, len(numbers)):
# Проверяем, является ли текущее число последовательным
if numbers[i] != numbers[i - 1] + 1:
# Если не последовательное, добавляем диапазон
if start == numbers[i - 1]:
ranges.append(str(start))
else:
ranges.append(f"{start}->{numbers[i - 1]}")
start = numbers[i] # Обновляем начало диапазона
# Добавляем последний диапазон
if start == numbers[-1]:
ranges.append(str(start))
else:
ranges.append(f"{start}->{numbers[-1]}")
return ", ".join(ranges)
# Примеры тестирования
print(summarize_ranges([0, 1, 2, 4, 5, 7])) # "0->2, 4->5, 7"
print(summarize_ranges([1, 2, 3, 6, 7, 8])) # "1->3, 6->8"
print(summarize_ranges([1])) # "1"
print(summarize_ranges([])) # ""Анализ кода:
- Проверка пустого массива: Если массив пустой, возвращаем пустую строку.
- Сортировка и удаление дубликатов: Это гарантирует, что диапазоны будут правильно определены.
- Итерация по массиву: Для каждого элемента проверяем, если он последовательный относительно предыдущего.
- Добавление диапазонов: Когда находим разрыв, добавляем текущий диапазон в список.
- Формирование результата: Соединяем диапазоны в строку и возвращаем.
Что могут спросить дальше
- Показать пример вывода для других наборов данных.
- Объяснить алгоритм более подробно.
- Перейти к следующему шагу и обсудить улучшения.
- Обсудить возможные крайние случаи.