Given a sequence of integers as an array,i have to determine whether it is possible to obtain a strictly increasing sequence by removing no more than one element from the array. Example
For sequence = [1, 3, 2, 1]
, the output should be
almostIncreasingSequence(sequence) = false
There is no one element in this array that can be removed in order to get a strictly increasing sequence.
For sequence = [1, 3, 2]
the output should be
almostIncreasingSequence(sequence) = true
We can remove 3
from the array to get the strictly increasing sequence [1, 2]
. Alternately, we can remove 2
to get the strictly increasing sequence [1, 3].
The function must return true
if it is possible to remove one element from the array in order to get a strictly increasing sequence, otherwise return false.
Here is what i have already tried , but it doesnt work for all situations
function almostIncreasingSequence(sequence) { for (var i = 0; i < sequence.length; i++) { if (sequence[i] > sequence[i + 1]) { sequence.splice(i, 1); return true; }; return false; }; }
Advertisement
Answer
Here is my answer
function almostIncreasingSequence(sequence) { if (isIncreasingSequence(sequence)) { return true; } for (var i = 0; i < sequence.length > 0; i++) { var tmpSequence = sequence.slice(0); // copy original array tmpSequence.splice(i, 1); if (isIncreasingSequence(tmpSequence)) { return true; } } return false; } function isIncreasingSequence(sequence) { for (var i = 0; i < sequence.length - 1; i++) { if (sequence[i] >= sequence[i + 1]) { return false; } } return true; } almostIncreasingSequence([1, 3, 2, 1]); // false almostIncreasingSequence([1, 3, 2]); // true