Viết hàm kiểm tra mảng có phải là tăng ngặt (strictly increasing) hoặc giảm ngặt (strictly decreasing) hay không.
- Tăng ngặt: mỗi phần tử > phần tử trước
- Giảm ngặt: mỗi phần tử < phần tử trước
Giải pháp
Mã triển khai:
const arr = [12, 45, 6, 4, 23, 23, 21, 1];
const arr2 = [12, 45, 67, 89, 123, 144, 2656, 5657];
const sameSlope = (a, b, c) => (b - a < 0 && c - b < 0) || (b - a > 0 && c - b > 0);
const increasingOrDecreasing = (arr = []) => {
if (arr.length <= 2) return true;
for (let i = 1; i < arr.length - 1; i++) {
if (!sameSlope(arr[i-1], arr[i], arr[i+1])) return false;
}
return true;
};
console.log(increasingOrDecreasing(arr)); // false
console.log(increasingOrDecreasing(arr2)); // true
Kết quả
Đầu ra trong console:
false
true
Giải thích: Kiểm tra dấu của hiệu giữa 3 phần tử liên tiếp. Nếu dấu thay đổi → không đơn điệu.