Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Sắp xếp lại phần tử mảng trong JavaScript

Mô tả vấn đề

Hàm JavaScript nhận vào mảng arr chứa các giá trị lặp lại liền kề. Hàm sắp xếp lại các phần tử sao cho không có hai phần tử nào bằng nhau. Trả về mảng đã sắp xếp lại (đảm bảo luôn có ít nhất một cách sắp xếp).

Ví dụ, nếu đầu vào là:

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

Thì đầu ra nên là:

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

Giải thích đầu ra

Có thể có các sắp xếp đúng khác.

Ví dụ minh họa

Mã thực hiện (tham lam: đặt phần tử xuất hiện nhiều nhất vào vị trí chẵn trước):

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));

Đầu ra

Kết quả trong console sẽ là:

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