Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Q: Solve almostIncreasingSequence in Java (Codefights)

Tags:

java

I can't pass the final hidden test.Could you tell me what I miss?Thanks in advance.

Here are the statements: Given a sequence of integers as an array, determine whether it is possible to obtain a strictly increasing sequence by removing no more than one element from the array.

boolean almostIncreasingSequence(int[] sequence) 
{
    boolean increase = true;
    List<Integer> list = new ArrayList<>();
    for (int a :sequence ) 
    {
        list.add(a); 
    }
    System.out.println(list);
    if(list.size()==1)
    {
        return false;
    }
    for (int i = 0;i < list.size()-1 ;i++ ) 
    {
        if (list.get(1)<=list.get(0)) 
        {
            list.remove(0);
            break;    
        }
        if(list.get(i+1)<=list.get(i)) 
        {
            if (list.get(i+1)>list.get(i-1)) 
            {
                list.remove(i); 
            }
            else
            {
                list.remove(i+1);
            }
            break;
        } 
    }

    for (int i =0;i<list.size()-1 ;i++ ) 
    {
        if (list.get(i+1)<list.get(i) || list.get(i+1)==list.get(i) ) 
        {
            increase = false;
        }    
    }
    return increase;
}
like image 900
Jimmy Avatar asked May 18 '26 09:05

Jimmy


2 Answers

This is the linear solution I came up with. It involves muting the array so you don't have to loop through the array again.

boolean almostIncreasingSequence(int[] sequence) {
    int removed = 0;

    for (int i = 0; i < sequence.length - 2 && removed <= 2; i ++) {
        int a = sequence[i];
        int b = sequence[i+1];
        int c = sequence[i+2];

        if (a >= b) {
            removed++;
            sequence[i] = b -1;
        } 

        if (b >= c){
            removed++;

            if (a == c) {
                sequence[i+2] = b +1;
            } else {
                sequence[i+1] = a;
            }
        }
    }

    return removed <= 1;
}
like image 177
user3347200 Avatar answered May 20 '26 22:05

user3347200


Here's my solution with O(n) complexity `

boolean almostIncreasingSequence(int[] sequence) {
    int flag = 0;
    int i = 0;
    while(i<sequence.length-1){
        if(sequence[i] < sequence[i+1]){
            i = i+1;
            continue;
        } else {
            flag = flag + 1;
            if(i>0 && i+2 < sequence.length && sequence[i+1] <= sequence[i-1] && sequence[i+2] <= sequence[i]){
                flag = flag + 1;
            } else {
                i = i+1;
            }
            if(flag > 1){
                return false;
            }
        }
    }
    return true;
}

`

like image 45
Arun Gopalpuri Avatar answered May 20 '26 21:05

Arun Gopalpuri



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!