/ / Как да получим почти нарастваща последователност от числа - javascript

Как да получите почти нарастваща последователност от числа - javascript

Като се има предвид поредица от числа като масив, трябва да се определи дали е възможно да се получи строго нарастваща последователност, като се отстранят не повече от един елемент от масива. пример

За sequence = [1, 3, 2, 1], продукцията трябва да бъде

almostIncreasingSequence(sequence) = false

Няма един елемент в този масив, който може да бъде отстранен, за да се получи строго нарастваща последователност.

За sequence = [1, 3, 2] продукцията трябва да бъде

almostIncreasingSequence(sequence) = true

Можем да премахнем 3 от масива, за да получи строго нарастващата последователност [1, 2], Алтернативно, можем да премахнем 2 да получи строго нарастващата последователност [1, 3].

Функцията трябва да се върне true ако е възможно да се премахне един елемент от масива, за да се получи строго нарастваща последователност, в противен случай се връща false.

Ето какво съм опитвал, но не работи за всички ситуации

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;
};
}

Отговори:

0 за отговор № 1

Ето моя отговор

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

1 за отговор № 2

Мисля, че последователността не се увеличава почти, ако има повече от един номер, който е по-малък от предишния му номер:

function almostIncreasingSequence(sequence) {
var found = 0;
sequence.forEach((el, index) => {
var next= sequence[index + 1] || Infinity;
if (el >= next) {
found++;
}
});
return found <= 1;
}
console.log("1, 3, 2, 1: ", almostIncreasingSequence([1, 3, 2, 1]));
console.log("1, 3, 2: ", almostIncreasingSequence([1, 3, 2]));
console.log("1, 2, 5, 5, 5: ", almostIncreasingSequence([1, 2, 5, 5, 5]));

И още по-прости и по-кратки с array.filter:

function almostIncreasingSequence(sequence) {
return sequence.filter((it, index) => it >= (sequence[index + 1] || Infinity)).length <= 1;
}
console.log("1, 3, 2, 1: ", almostIncreasingSequence([1, 3, 2, 1]));
console.log("1, 3, 2: ", almostIncreasingSequence([1, 3, 2]));
console.log("1, 2, 5, 5, 5: ", almostIncreasingSequence([1, 2, 5, 5, 5]));
console.log("1, 2, 4, 5, 5: ", almostIncreasingSequence([1, 2, 4, 5, 5]));


0 за отговор № 3

Решение на въпрос:

function almostIncreasingSequence(sequence) {
var inc = true;
for (var i = 0; i < sequence.length; i++) {
if (sequence[i] >= sequence[i + 1]) {
if (inc) {
inc = false;
}
else {
return false;
}
}
};
return true;
}

console.log(almostIncreasingSequence([1, 3, 2, 1])); // false
console.log(almostIncreasingSequence([1, 3, 2])); // true


0 за отговор № 4
function Test(arr){
var set_once = false;
for (i=0; i<arr.length; i++){
if(arr[i+1] <= arr[i]){
if(!set_once){
set_once = true;
arr.splice(i+1,1);
i = i-1;
}else{
return false;
}
}
}
return true
}

0 за отговор № 5

function almostIncreasingSequence(sequence) {
var found = false;
for (var i=0;i<sequence.length;i++) {
if(sequence[i] <= sequence[i-1]) {
if(found) {
return false;
}
found = true;

if(i === 1 || i + 1 === sequence.length) {
continue;
}
else if (sequence[i] > sequence[i-2]) {
sequence[i-1] = sequence[i-2];
}
else if(sequence[i-1] >= sequence[i+1]) {
return false;
}
}
}
return true;
}


0 за отговор № 6

function almostIncreasingSequence(seq) {
var bad=0
for(var i=1;i<seq.length;i++) if(seq[i]<=seq[i-1]) {
bad++
if(bad>1) return false
if(seq[i]<=seq[i-2]&&seq[i+1]<=seq[i-1]) return false
}
return true
}