ตรวจสอบว่าอาร์เรย์เรียงลำดับแล้วหรือไม่ ไม่สนว่าจะน้อยไปมากหรือมากไปน้อย (Monotonic Array)
ตัวอย่างโค้ด
const arr = [1, 3, 56, 87, 99, 102, 144, 255, 456, 788, 999];
const isSorted = arr => {
if (arr.length <= 1) return true;
for (let i = 1; i < arr.length; i++) {
const con1 = arr[i] > 0 && arr[i-1] < 0;
const con2 = arr[i] < 0 && arr[i-1] > 0;
if (con1 || con2) return false;
}
return true;
};
console.log(isSorted(arr));
ผลลัพธ์
true
ปัญหาของโค้ดต้นฉบับ
โค้ดเช็คแค่ "เครื่องหมาย" (positive/negative) ไม่ใช่ "ลำดับ" จริงๆ
เช่น [1, -2, 3] จะคืน true แต่อาจไม่ได้เรียง
เวอร์ชันที่ถูกต้อง (Monotonic Check)
const isMonotonic = arr => {
if (arr.length <= 2) return true;
let increasing = true, decreasing = true;
for (let i = 1; i < arr.length; i++) {
if (arr[i] > arr[i-1]) decreasing = false;
if (arr[i] < arr[i-1]) increasing = false;
}
return increasing || decreasing;
};
เช็คพร้อมกันว่าเพิ่มขึ้นอย่างเดียว หรือลดลงอย่างเดียว