Javascript
 Computer >> コンピューター >  >> プログラミング >> Javascript

JavaScriptで配列を合計が等しいn個のパーティションに分割できます


最初の引数として数値の配列arrを取り、2番目の引数として数値numを受け取るJavaScript関数を作成する必要があります。

関数は、すべてのグループの合計が等しくなるように、配列arrの要素をnumグループに分散する方法が存在するかどうかを判断する必要があります。そのような方法が存在する場合、関数はtrueを返し、そうでない場合はfalseを返す必要があります。

例-

入力配列と数値が-

の場合
const arr = [4, 6, 3, 3, 7, 4, 1];
const num = 4;

その場合、出力は-

になります。
const output = true;

[7]、[1、6]、[4、3]、[4、3]

の4つのグループがあるためです。

このためのコードは-

になります
const arr = [4, 6, 3, 3, 7, 4, 1];
const num = 4;
const canDivide = (arr = [], num = 1) => {
   const sum = arr.reduce((acc, num) => acc + num);
   if (sum % num !== 0 || arr.some(num => num > sum / num)) {
      return false;
   }
   const used = new Set();
   return (function find(start, target) {
      if (used.size === arr.length) {
         return true;
      }
      if (target < 0) {
         return false;
      }
      if (target === 0) {
         return find(0, sum / num);
      }
      for (let i = start; i < arr.length; i++) {
         if (!used.has(i)) {
            used.add(i);
            if (find(i + 1, target - arr[i])) {
               return true;
            }
            used.delete(i);
         }
      }
      return false;
   })(0, sum / num);
};
console.log(canDivide(arr,num));

ソリューションで行った手順は次のとおりです-

  • 手順1.合計をnumで割ることができない場合、または数値の1つがsum / numより大きい場合は、falseを返します。

  • ステップ2.HashSetを使用して使用済みの番号を追跡しました。

  • ステップ3.サブパーティションの検索を開始しました。

  • すべての数字が使用されれば、完了です。

  • サブセットの合計が大きすぎる場合は、検索を停止しました。

  • 1つのサブセットが見つかった場合は、すべての番号を使用するまで検索を続けました。

  • そして最後に、未使用の番号をすべて試しました。

出力

そして、コンソールの出力は-

になります
true

  1. プロパティがJavaScriptを使用してオブジェクトにあるかどうかを確認できますか?

    以下は、プロパティがJavaScriptのオブジェクトにあるかどうかを確認するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <s

  2. JavaScriptを使用してオブジェクトを単一のオブジェクト配列にマージする方法は?

    以下は、オブジェクトを単一のオブジェクト配列にマージするコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style>