Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

การจัดเรียงอาร์เรย์ขององค์ประกอบการทำซ้ำที่ไม่ซ้ำกันสามรายการใน JavaScript


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