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

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

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng số, arr, làm đối số đầu tiên và duy nhất.

Arr của mảng, sẽ luôn có độ dài chẵn.

Hàm của chúng ta sẽ trả về true nếu và chỉ khi có thể sắp xếp lại nó sao cho arr [2 * i + 1] =2 * arr [2 * i] với mọi 0 <=i

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

const arr = [4, -2, 2, -4];

Sau đó, kết quả đầu ra phải là -

const output = true;

Giải thích đầu ra

Chúng ta có thể lấy hai nhóm [-2, -4] và [2,4] để tạo thành [-2, -4,2,4] hoặc [2,4, -2, -4].

Ví dụ

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

const arr = [4, -2, 2, -4];
const canRearrange = (arr = []) => {
   const map = arr.reduce((acc, num) => {
      acc[num] = (acc[num] || 0) + 1
      return acc
   }, {});
   const keys = Object.keys(map)
   .map(key => Number(key))
   .sort((a, b) => a - b)
   for (const key of keys) {
      if (key < 0) {
         while (map[key] > 0) {
            if (map[key / 2] > 0) {
               map[key] -= 1
               map[key / 2] -= 1
            } else {
               return false
            }
         }
      } else {
         while (map[key] > 0) {
            if (map[key * 2] > 0) {
               map[key] -= 1
               map[key * 2] -= 1
            } else {
               return false
            }
         }
      }
   }
   return true
};
console.log(canRearrange(arr));

Đầu ra

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

true