在 JavaScript 中找到具有相等和的 n 個子陣列


我們需要編寫一個 JavaScript 函式,它的第一個引數接受一個整型陣列,第二個引數接受一個整數。

該函式應檢查是否能從原始陣列中建立 n(第二個引數)個子陣列,使得所有子陣列的和相等。

例如 −

如果輸入是 −

const arr = [4, 3, 2, 3, 5, 2, 1];
const num = 4;

輸出應為 true,因為子陣列是:[5]、[1, 4]、[2, 3]、[2, 3],它們的和均為 5。

示例

以下是程式碼 −

const arr = [4, 3, 2, 3, 5, 2, 1];
const num = 4;
const canFormSubarray = (arr = [], num) => {
   const total = arr.reduce((sum, num) => sum + num, 0);

   if (total % num !== 0) {
      return false;
   }
   const target = total / num;
   const visited = new Array(arr.length).fill(false);
   const canPartition = (start, numberOfSubsets, currentSum) => {
      if (numberOfSubsets === 1) {
         return true;
      }
      if (currentSum === target) {
         return canPartition(0, numberOfSubsets - 1, 0);
      };
      for (let i = start; i < arr.length; i++) {
         if (!visited[i]) {
            visited[i] = true;
            if (canPartition(i + 1, numberOfSubsets, currentSum + arr[i])) {
               return true;
            }
            visited[i] = false;
         };
      };
      return false;
   };
   return canPartition(0, num, 0);
};
console.log(canFormSubarray(arr, num));

輸出

以下是控制檯輸出 −

true

更新於: 18-Jan-2021

99 人瀏覽

開啟你的事業

完成課程,獲得認證

開始
廣告