Untitled
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