สมมติว่าเรามีอาร์เรย์ของตัวเลขที่มีความถี่ขององค์ประกอบสามอย่าง -1, 0 และ 1 เช่นนี้ −
const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1];
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าว ฟังก์ชันควรจัดเรียงอาร์เรย์พิเศษนี้แทน เช่น โดยไม่ต้องใช้อาร์เรย์พิเศษใดๆ ในการจัดเก็บค่า
เงื่อนไขเดียวคือฟังก์ชันของเราควรเป็นฟังก์ชันเวลาเชิงเส้น (ใช้การวนซ้ำเพียงครั้งเดียว)
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const arr = [1, 1, 0, -1, 1, 0, -1, 1, 0, 0, 1]; const sortSpecialArray = (arr = []) => { const swap = (a, b) => { let middle = arr[a] arr[a] = arr[b] arr[b] = middle }; let left = 0; let middle = 0; let right = arr.length-1; while(middle <= right){ if(arr[middle] === -1){ swap(left++, middle++); }else if(arr[middle] === 0){ middle++; }else if(arr[middle] === 1){ swap(right--, middle); } }; }; sortSpecialArray(arr); console.log(arr);
ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
[ -1, -1, 0, 0, 0, 0, 1, 1, 1, 1, 1 ]