重新排列 JavaScript 陣列中的元素


問題

我們需要編寫一個 JavaScript 函式,它接受一個數字陣列 arr 作為第 1 個也是唯一一個引數。

陣列 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

更新於: 2021 年 4 月 9 日

215 瀏覽

開啟你的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.