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

จัดเรียงสมาชิกอาร์เรย์ไม่ให้มีค่าเท่ากันติดกันใน JavaScript


ปัญหา

ฟังก์ชัน JavaScript ที่รับอาร์เรย์ของค่าตรงตัว arr เป็นอาร์กิวเมนต์เดียว อาร์เรย์นี้มีค่าซ้ำที่วางติดกัน

ฟังก์ชันควรจัดเรียงสมาชิกของอาร์เรย์ใหม่ ทำให้ไม่มีสมาชิกสองตัวใดๆ ในอาร์เรย์มีค่าเท่ากัน ฟังก์ชันควรคืนอาร์เรย์ที่จัดเรียงแล้ว โดยที่รับประกันว่ามีวิธีจัดอย่างน้อยหนึ่งวิธี

ตัวอย่างเช่น หากอินพุตคือ

const arr = [7, 7, 7, 8, 8, 8];

ผลลัพธ์ควรเป็น

const output = [7, 8, 7, 8, 7, 8];

คำอธิบายผลลัพธ์:

อาจมีการจัดเรียงที่ถูกต้องอื่นๆ อีกด้วย

ตัวอย่างโค้ด

const arr = [7, 7, 7, 8, 8, 8]; 
const rearrangeArray = (arr = []) => {
  const map = arr.reduce((acc, val) => {
    acc[val] = (acc[val] || 0) + 1;
    return acc;
  }, {});
  const keys = Object.keys(map).sort((a, b) => map[a] - map[b]);
  const res = [];
  let key = keys.pop();
  for(let i = 0; i < arr.length; i += 2){
    if(map[key] <= 0){
      key = keys.pop();
    }
    map[key] -= 1;
    res[i] = Number(key);
  }
  for(let i = 1; i < arr.length; i += 2){
    if(map[key] <= 0){
      key = keys.pop();
    }
    map[key] -= 1;
    res[i] = Number(key);
  }
  return res;
};
console.log(rearrangeArray(arr));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

[ 8, 7, 8, 7, 8, 7 ]