สมมติว่าเรามีอาร์เรย์ของตัวเลขที่มีความถี่ขององค์ประกอบสามอย่าง -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 ]