Проверить есть ли в списке 5 чисел которые нарастают непрерывно
Допустим у нас есть список:
nums = [1, 3, 5, 4, 2, 19, 22]
OUT: True, 5
nums = [1, 4, 8, 10, 22, 44]
OUT: False
В первом списке вперемешку есть цифры, которые нарастают безперерывно: 1,2,3,4,5
Как можно проверить, что в списке есть 5 цифр, которые нарастают непрерывно и вернуть число наибольшего нарастающего, в нашем случае 5
Ответы (2 шт):
Автор решения: RomanR
→ Ссылка
Судя по примерам, числа должны идти подряд. Или нет? Т.е. 1, 2, 3, 4, 5 а не 1, 3, 5, 6, 20
nums = [1, 3, 5, 4, 2, 19, 22]
nums = sorted(nums) #сортировка
n = nums[0]# последний элемент
counter = 1 # счетчик
i = 1 # счетчик для цикла
while i < len(nums)-1 and counter != 5: # пока не закончились элементы или не нашли 5 подряд идущих элементов
if nums[i] == n + 1:# если следующий элемент больше на 1, то счетчик увеличиваем на 1
counter += 1
n = nums[i]
else:
counter = 1 # если нет, сбрасываем на 1
n = nums[i]
i += 1
if counter == 5: # проверяем чему равен счетчик, выводим ответ
print(True, nums[i - 1])
else:
print(False)
Автор решения: entithat
→ Ссылка
Если кратко, то сортируем массив (по убыванию), чтобы потом при первом совпадении зразу найти максимальный елемент последовательности.
def check(arr):
arr.sort(reverse=True)
for i,e in enumerate(arr):
if arr[i: i+5] == list(range(e, e-5, -1)):
return True, e
return False, None
print(check([1, 2, 3, 4, 5, 0, 6, 19, 22])) # True: 2 3 4 5 6, 6
print(check([1, 2, 3, 4, 5, 0, 7, 19, 22])) # True: 1 2 3 4 5, 5
print(check([1, 2, 6, 4, 5, 0, 7, 19, 22])) # False
P.S. Чтобы не было проблем при распаковке выходного значения функции (или других ситуациях), при отсутствии последовательности стоит возвращать (False, None).