Cho một dãy số nguyên dưới dạng mảng, xác định xem có thể得到 một dãy tăng chặt bằng cách loại bỏ tối đa một phần tử hay không.
Dãy a0, a1, ..., an được coi là tăng chặt nếu a0 < a1 < ... < an. Dãy chỉ có một phần tử cũng được coi là tăng chặt.
Ví dụ
Với sequence = [1, 3, 2, 1], kết quả là false vì không thể loại bỏ một phần tử nào để được dãy tăng chặt.
Với sequence = [1, 3, 2], kết quả là true vì có thể loại bỏ 3 để được [1, 2] hoặc loại bỏ 2 để được [1, 3].
Mã thực hiện
const arr1 = [3, 5, 67, 98, 3];
const arr2 = [4, 3, 5, 67, 98, 3];
const almostIncreasingSequence = sequence => {
let removed = 0;
let i = 0;
let prev = -Infinity;
while (removed < 2 && i < sequence.length) {
if (sequence[i] > prev) {
prev = sequence[i];
} else {
prev = Math.min(prev, sequence[i]);
removed++;
}
i++;
}
return removed < 2;
};
console.log(almostIncreasingSequence(arr1));
console.log(almostIncreasingSequence(arr2));
Kết quả
true false