在 JavaScript 中重新排列数组的元素

问题

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

数组 arr,将始终是偶数长度。

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

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

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

以上是 在 JavaScript 中重新排列数组的元素 的全部内容, 来源链接: utcz.com/z/347578.html

回到顶部