Задача с собеседования в Яндекс
Дан список неотрицательных целых чисел, повторяющихся элементов в списке нет. Нужно преобразовать его в строку, сворачивая соседние по числовому ряду числа в диапазоны
Пример:
[1,4,5,2,3,9,8,11,0] => "0-5,8-9,11"
НАШ ЧАТ
Решение:
Сортировка плюс один проход. По времени за O(nlogn)
def compress_ranges(nums):
if not nums:
return ""
nums.sort()
result = []
start = end = nums[0]
for num in nums[1:]:
if num == end + 1:
end = num
else:
if start == end:
result.append(str(start))
else:
result.append(f"{start}-{end}")
start = end = num
if start == end:
result.append(str(start))
else:
result.append(f"{start}-{end}")
return ",".join(result)
@algoses
Post #392
11.8K
- ❤ 9
- 👏 1