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

JavaScriptのサブ配列の最大の合計


問題

最初の引数として非負の整数の配列arrを取り、2番目の引数として整数num(num

この関数のタスクは、配列をnum個の空でない連続サブ配列に分割することです。配列は、これらのnum個のサブ配列の中で最大の合計が最小になるように分割する必要があります。次に、関数はサブアレイ間で累積された最大の合計を返す必要があります。

たとえば、関数への入力が-

の場合
const arr = [5, 1, 4, 8, 7];
const num = 2;

その場合、出力は-

になります。
const output = 15;

出力の説明

元の配列をサブ配列に分割する方法は4つありますが、配列を2つのグループ[5、1、4]と[8、7]に分割すると、これら2つのグループの合計は最小になり、これら2つのグループの大きい方が8 + 7=15これは関数が返す必要があります。

このためのコードは-

になります
const arr = [5, 1, 4, 8, 7];
const num = 2;
const splitArray = (arr = [], num = 1) => {
   let max = 0;
   let sum = 0;
   const split = (arr, mid) => {
      let part = 1;
      let tempSum = 0;
      for (let num of arr) {
         if (tempSum + num > mid) {
            tempSum = num;
            part++;
         } else {
            tempSum += num;
         }
      }
      return part;
   };
   for (let num of arr) {
      max = Math.max(max, num);
      sum += num;
   };
   let low = max;
   let high = sum;
   while (low < high) {
      let mid = Math.floor((high+low)/2);
      let part = split(arr, mid);
      if (part > num) {
         low = mid + 1;
      } else {
         high = mid;
      }
   }
   return low;
};
console.log(splitArray(arr, num));

コードの説明:

ここでは、バイナリ検索を使用して、最適な分割を見つけることができるかどうかを確認しました。

出力

コンソールの出力は-

になります
15

  1. JavaScriptでnで割り切れる合計

    問題 最初の引数として数値の配列arrを取り、2番目の引数として数値numを受け取るJavaScript関数を作成する必要があります。この関数は、合計がnumで割り切れる(連続した、空でない)サブ配列の数を返す必要があります。 たとえば、関数への入力が-の場合 const arr = [4, 5, 0, -2, -3, 1]; const num = 5; その場合、出力は-になります。 const output = 7; 出力の説明 合計が5で割り切れる7つのサブ配列があります- [4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [

  2. JavaScriptで必要な合計を持つバイナリサブ配列

    問題 最初の引数としてバイナリ配列arrを取り、2番目の引数として数値targetを受け取るJavaScript関数を作成する必要があります。 私たちの関数は、配列arrに存在するサブ配列の数をカウントすることになっています。その要素の合計はcountに等しくなります。最終的にこのカウントを返す必要があります。 たとえば、関数への入力が 入力 const arr = [1, 0, 1, 0, 1]; const target = 2; 出力 const output = 4; 出力の説明 必要なサブアレイは次のとおりです。 [1,0,1][1,0,1,0] [0,1,0,1