用 JavaScript 將數字陣列分割成平均值相同的兩個陣列


我們需要編寫一個 JavaScript 函式,這個函式接收一個整數陣列作為第一個也是唯一一個引數。

該函式需要確定輸入陣列的元素是否存在這樣的組合:將它們分成兩組(可能/可能不包含相同元素)時,兩組的平均值正好相同。如果存在這樣的條件,函式應該返回 true,否則返回 false。

例如 -

如果輸入陣列是 -

const arr = [6, 3, 2, 8, 1, 5, 7, 4];

那麼輸出應該是 -

const output = true;

因為組合是 [8, 1, 5, 4] 和 [6, 3, 2, 7],兩組的平均值都是 4.5

示例

以下是程式碼 -

const arr = [6, 3, 2, 8, 1, 5, 7, 4];
const canHaveEqualAveragePartition = (arr = []) => {
   const sum = arr.reduce((acc, val) => acc + val);
   const array = Array(sum+1).fill(false).map(() =>
   Array(arr.length+1).fill(false));
   array[0][0] = true;
   for(let i=0; i < arr.length; ++i){
      for(let j=sum - arr[i];j>=0;--j){
         for(let k=arr.length-2;k>=0;--k){
            if(array[j][k]){
               array[j + arr[i]][k+1] = true;
               if((j + arr[i]) * (arr.length - k - 1) == (sum - j -arr[i]) * (k + 1)){
                  return true;
               }
            }
         }
      }
   }
   return false;
};
console.log(canHaveEqualAveragePartition(arr));

輸出

以下是控制檯輸出 -

true

更新時間:2021 年 1 月 20 日

174 次瀏覽

啟動您的事業

完成課程獲得認證

開始
廣告