Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การตรวจสอบว่าอาร์เรย์สามารถจัดเรียงเป็นลำดับต่อเนื่องได้หรือไม่ - JavaScript

ฟังก์ชันนี้ตรวจสอบว่าสมาชิกในอาร์เรย์สามารถจัดเรียงใหม่เพื่อให้ได้ลำดับตัวเลขต่อเนื่อง (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. คัดลอกและเรียงลำดับอาร์เรย์
  2. คาดหวังว่าค่าจะเริ่มจากค่าต่ำสุด และเพิ่มทีละ 1
  3. ใช้ตัวแปร i คาดหวังค่า และ j ดัชนีอาร์เรย์

ผลลัพธ์

true

Complexity: O(n log n) จากการ sort สามารถทำ O(n) ได้ด้วย Set + min/max