Computer >> Máy Tính >  >> Lập trình >> Javascript

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

Vấn đề

Hàm JavaScript nhận một mảng các ký tự, arr, làm đối số đầu tiên và duy nhất. Mảng này chứa một số bản sao được đặt liền kề.

Hàm của chúng ta nên sắp xếp lại các phần tử của mảng sao cho không có hai phần tử nào trong mảng bằng nhau. Hàm của chúng ta sẽ trả về mảng được sắp xếp lại, vì nó được đảm bảo rằng tồn tại ít nhất một cách có thể có để sắp xếp như vậy.

Ví dụ:nếu đầu vào của hàm là -

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

Sau đó, đầu ra phải là -

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

Giải thích đầu ra:

Cũng có thể có những cách sắp xếp lại chính xác khác.

Ví dụ

Mã cho điều này sẽ là -

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

Và đầu ra trong bảng điều khiển sẽ là -

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