ฟังก์ชันนี้ตรวจสอบว่าสมาชิกในอาร์เรย์สามารถจัดเรียงใหม่เพื่อให้ได้ลำดับตัวเลขต่อเนื่อง (consecutive sequence) ได้หรือไม่
ตัวอย่าง
// Input: [3, 1, 4, 2, 5] // สามารถเรียงเป็น [1, 2, 3, 4, 5] ได้ // Output: true
ตัวอย่างโค้ด
const arr = [3, 1, 4, 2, 5];
const canBeConsecutive = (arr = []) => {
if (!arr.length) return false;
const copy = arr.slice().sort((a, b) => a - b);
// ตรวจสอบว่าแต่ละตัวเพิ่มขึ้นทีละ 1
for (let i = copy[0], j = 0; j < copy.length; i++, j++) {
if (copy[j] === i) continue;
return false;
}
return true;
};
console.log(canBeConsecutive(arr));
การทำงาน
- คัดลอกและเรียงลำดับอาร์เรย์
- คาดหวังว่าค่าจะเริ่มจากค่าต่ำสุด และเพิ่มทีละ 1
- ใช้ตัวแปร
iคาดหวังค่า และjดัชนีอาร์เรย์
ผลลัพธ์
true
Complexity: O(n log n) จากการ sort สามารถทำ O(n) ได้ด้วย Set + min/max