Untitled

 avatar
unknown
plain_text
5 months ago
1.7 kB
4
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