Решить почти возрастающую последовательность на CodeSignal в Dart - PullRequest
0 голосов
/ 28 апреля 2020

Описание:

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

Примечание: последовательность a0, a1, ..., an считается строго возрастающей, если a0

Пример

Для последовательности = [1, 3, 2, 1] вывод должен быть almostIncreasingSequence(sequence) = false.

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

Для sequence = [1, 3, 2], вывод должен быть almostIncreasingSequence(sequence) = true.

Вы можете удалить 3 из массива, чтобы получить строго возрастающую последовательность [1, 2]. Кроме того, вы можете удалить 2, чтобы получить строго возрастающую последовательность [1, 3].

Ввод / Вывод

[ограничение времени выполнения] 4 секунды (дротик)

[input] последовательность array.integer

Гарантированные ограничения:

2 ≤ sequence.length ≤ 105,

-105 ≤ sequence[i] ≤ 105.

[output] boolean Возвращает true, если возможно удалить один элемент из массива для получения строго возрастающей последовательности, в противном случае вернуть false.

Через некоторое время после попытки и отладка, я пришел к этому прекрасному решению:


bool almostIncreasingSequence(List<int> sequence) {
    int decreseCounter = 0;
    int duplicateCounter = 0;
    for(int i = 0; i < sequence.length - 1; i++){

        if(sequence[i] >= sequence[i + 1]) decreseCounter++; //Check for decreasing pairs 
        if(decreseCounter > 1) return false;

    }
    for(int i = 0; i < sequence.length - 2; i++){

        if(sequence[i] == sequence[i + 2]) duplicateCounter++; //Check for duplicate pairs
        if(duplicateCounter > 1) return false;


        if(sequence[i] >= sequence[i + 1] // Check for cliffs (elements that follow by two smaller or equal elements)
        && sequence[i] >= sequence[i + 2]
        && (i > 0 && i < sequence.length - 3)) return false;

    }

    return true;

}

Этот код очень хорошо работал со всеми "не скрытыми" тестами и любым списком, который я дал! Но когда я отправил его, код не прошел только ОДИН скрытый тест! Есть идеи, почему это не удалось?

1 Ответ

0 голосов
/ 28 апреля 2020

Он говорит, что [1,2,3,1,2] верно, но это не так. Полагаю, вам не нужно решение, поскольку задача состоит в обучении, поэтому я не дам его, если вы не скажете мне иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...