Создание функции, которая возвращает возрастающую последовательность - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь создать функцию, которая для последовательности целых чисел в виде массива может определить, возможно ли получить строго возрастающую последовательность, удалив не более одного элемента из массива. Если элемент может быть удален, тогда вывод - True, иначе возвращает False. Я пытался,

def almostIncreasingSequence(sequence):

   if sequence[:-1] == sequence[1::]:
        return True
   else:
        return False

Работает со списком,

  sequence =  [1, 3, 2, 1]
  >>> False

Поскольку вы не можете удалить любое число, которое приведет к увеличению последовательности. Однако, если список был

sequence: [1, 3, 2]
>>> True

Это правда, поскольку вы можете удалить 2 или 3, чтобы иметь возрастающую последовательность. Моя функция неправильно выдает False.

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

В приведенном ниже коде используется проверка монотонности, как написано в этом ответе , и выполняется перебор элементов списка, чтобы проверить, не приводит ли всплывающее окно к одному элементу к увеличению монотонности.

def strictly_increasing(L):
    return all(x<y for x, y in zip(L, L[1:]))
def non_decreasing(L):
    return all(x<=y for x, y in zip(L, L[1:]))

L = [1, 3, 2]
L_mod = L.copy()
my_bool = False
if not strictly_increasing(L):
    for i, x in enumerate(L):
        L_mod.pop(i)
        if strictly_increasing(L_mod):
            my_bool = True
            exit
        else: L_mod = L.copy()
else:
    my_bool = True

Используйте strictly_increasing или non_decreasing как хотите.

0 голосов
/ 11 ноября 2018

Я действительно не понимаю, какая у тебя была первая идея ... Как насчет более простого решения?

def fn(seq):
    last_i = None
    lives = 1
    for i in seq :
        if last_i is None :
            last_i = i
        else :
            if (i <= last_i):
                lives = lives - 1
                if (lives < 0) :
                    return False
            last_i = i
    return True

>>> fn([1, 3, 2, 1])
False
>>> fn([1, 3, 2])
True
>>> fn([1, 3, 2, 3])
True
>>> fn([1, 3, 2, 4, 6, 8])
True
>>> fn([1, 3, 2, 4, 6, 8, 2])
False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...