Member 13277493 Ответов: 1

Почти возрастающая последовательность


/*Given a sequence of integers as an array(vector), determine whether it is possible to obtain a strictly
 * increasing sequence by removing no more than one element from the array.*/

#include <iostream>
#include <vector>
using namespace std;
bool almostIncreasingSequence(std::vector<int> sequence)
{
    int count=0;
    int i=0;

    while(i<sequence.size())
        {
            if(sequence[i]>sequence[i+1])
                {
                    count++;
                }
            i++;

        }
        if(count>1)
            {
            return false;}
        else
            {
                return true;
            }
            i++;
}


int main()
{
    vector<int>arr{1,6,5,8,9};
    cout<<almostIncreasingSequence(arr)<<endl;


}


Что я уже пробовал:

Я пытаюсь правильно скомпилировать этот код, но не понимаю, в чем моя ошибка

OriginalGriff

В чем же ошибка?
Где это видно?

Member 13277493

это проблема в веб-сайте codefights, они являются некоторыми тестами, которые эта проблема не проходит.

1 Ответов

Рейтинг:
6

CPallini

Ваша непосредственная проблема заключается в следующем

Цитата:
в то время как(я И Л;последовательность.размер())
Вы должны изменить его на
while(i < (sequence.size() - 1) )


Однако этого недостаточно.
Прежде всего вы должны заменить > с >= в сравнениях (потому что это должно быть строго увеличивающаяся последовательность), то вы должны попытаться удалить либо sequence[i] или sequence[i+1], принимая первый из них, который локально сохраняет растет собственность. Наконец 'вы можете работать над точками стиля- например, возвращение false всякий раз, когда count>1 вместо того, чтобы ждать конца цикла.


Member 13277493

#include <iostream>
#включить <вектор>
использование пространства имен std;
bool almostIncreasingSequence(std::vector<int> sequence)
{
int count=0;
int i=0;

в то время как(я И Л;последовательность.размер()-1)
{
если(последовательность[i]>=последовательность[i+1])
{
считать++;
последовательности.стереть(последовательность.начать()+(я+1));
}
я++;

if(count>1)
{
возвращать false;}
}

if(count<=1)
{
вернуть true;
}

}


тап_п()
{
вектор<int>arr{1,6,5,8,9};
соиь<&ЛТ;almostIncreasingSequence(ОБР) на<<епси;


}
это правильный код?

jeron1

Это работает?

Member 13277493

Это работает, но некоторые тесты работают неправильно.

CPallini

Потому что вы всегда удаляете (i+1)th пункт. Как я уже сказал Вы также должны попытаться удалить ith пункт.

Member 13277493

извините, если мой вопрос глупый, но я написал так, это добавило истинную отметку также для одного теста, я не совсем понимаю, что происходит с массивом
bool almostIncreasingSequence(std::vector<int> sequence)
{
int count=0;
int i=0;

в то время как(я И Л;(последовательность.размер()-1))
{

если(последовательность[i]>последовательность[i+1])
{

последовательности.стереть(последовательность.начать()+(я+1));
считать++;

}
if(sequence[i]==последовательность[i+1])
{
последовательности.стереть(последовательность.начать()+я);
считать++;
}
я++;


if(count>1)
{
возвращать false;}
}

if(count<=1)
{
вернуть true;
}

}