Untitled
unknown
plain_text
a year ago
1.7 kB
9
Indexable
# Дан список неотрицательных целых чисел, повторяющихся элементов в списке нет.
# Нужно преобразовать его в строку, сворачивая соседние по числовому ряду числа в диапазоны.
# [1,4,5,2,3,9,8,11,0] => "0-5,8-9,11"
# [1,4,3,2] => "1-4"
# [1,4] => "1,4"
# [1,2] => "1-2"
# [1, 2, 4, 5]
# [2, 1, 5, 4]
def ranges(nums: List[int]) -> str:
nums_set = set(nums)
res_ranges = []
# while nums_set:
# r = l = nums_set.pop()
for n in nums:
if n not in nums_set:
continue
l, r = n, n
while l - 1 in nums_set:
nums_set.remove(l - 1)
l -= 1
while r + 1 in nums_set:
nums_set.remove(r + 1)
r += 1
res_ranges.append((l, r))
def ranges(nums: List[int]) -> str:
sorted_nums = sorted(nums)
ranges_lst = []
i = 0
while i < len(sorted_nums):
l = sorted_nums[i]
r = sorted_nums[i]
for j in range(i + 1, len(sorted_nums)):
if sorted_nums[j] == sorted_nums[j - 1] + 1:
r = sorted_nums[j]
else:
i = j - 1
break
ranges_lst.append((l, r))
i += 1
res_str = ",".join([f'{l}-{r}' if l != r else f'{l}' for l, r in ranges_lst])
return res_str
# 1, 2, 4, 5
res = []
i = 0
l = nums[0]
r = nums[0]
while i < len(sorted_nums) - 1:
if nums[i] + 1 == nums[i + 1]:
r = nums[i + 1]
else:
res.append([l, r])
l = nums[i + 1]
r = nums[i + 1]
i += 1
res.append([l, r])
Editor is loading...
Leave a Comment