在 JavaScript 中重新排列数组元素

javascriptweb developmentfront end technology

问题

我们需要编写一个 JavaScript 函数,该函数将数字数组 arr 作为第一个也是唯一的参数。

数组 arr 的长度始终为偶数。

当且仅当可以重新排序时,我们的函数才应返回 true,即对于每个 0 <= i < length(arr) / 2,arr[2 * i + 1] = 2 * arr[2 * i]。

例如,如果函数的输入是 −

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

那么输出应该是 −

const output = true;

输出说明

我们可以取两个组 [-2,-4] 和 [2,4] 来形成 [-2,-4,2,4] 或 [2,4,-2,-4]。

示例

其代码为 −

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

输出

控制台中的输出将是 −

true

相关文章