Проверить есть ли в списке 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).

→ Ссылка