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

JavaScriptで2つの配列から最大数を見つける


問題

1番目と2番目の引数として2つの数値arr1とarr2を表す1桁の数値の2つの配列を受け取るJavaScript関数を作成する必要があります。関数の3番目の引数は数値になります

num (num <= length of arr1 + length of arr2)

この関数は、長さnumの1桁の数値の新しい配列を返す必要があります。これは、それ自体が数値を表します。また、この数は、両方の配列の要素を使用して作成できる最大数である必要があります。唯一の条件は、同じ配列の要素の相対的な順序を維持する必要があることです。

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

の場合
const arr1 = [1, 3, 4, 5, 6];
const arr2 = [9, 1, 2, 5, 8, 3];
const num = 4;

その場合、出力は-

になります。
const output = [9, 8, 6, 3];

このためのコードは-

になります
const arr1 = [1, 3, 4, 5, 6];
const arr2 = [9, 1, 2, 5, 8, 3];
const num = 4;
const maxArray = (arr1 = [], arr2 = [], num) => {
   const map = new Map();
   const match = (a, b, num) => {
      if (map.has(a + ',' + b + ',' + num)) {
         return map.get(a + ',' + b + ',' + num);
      }
      let output = [];
      while(num > 0) {
         let maxa = -Infinity;
         let maxai = 0;
         let maxb = -Infinity;
         let maxbi = 0;
         for(let i = a; i < arr1.length && arr1.length + arr2.length - (i + b) >= num; i++) {
            if (arr1[i] > maxa) {
               maxa = arr1[i];
               maxai = i;
            }
         }
         for(let i = b; i < arr2.length && arr1.length + arr2.length - (a + i) >= num; i++) {
            if (arr2[i] > maxb) {
               maxb = arr2[i];
               maxbi = i;
            }
         }
         if (maxa === maxb) {
            output.push(maxa);
            let ca = map.get(a+','+(maxbi+1)+','+(num-1)) || match(a, maxbi+1, num-1);
            let cb = map.get((maxai+1)+','+b+','+(num-1)) || match(maxai+1,b,num-1);
            map.set(a+','+(maxbi+1)+','+(num-1), ca);
            map.set((maxai+1)+','+b+','+(num-1), cb);
            if (ca.join('') > cb.join('')) {
               return [...output, ...ca];
            } else {
               return [...output, ...cb];
            }
         } else if (maxa > maxb) {
            output.push(maxa);
            a = maxai + 1;
         } else {
            output.push(maxb);
            b = maxbi + 1;
         }
         num--;
      }
      map.set(a + ',' + b + ',' + num, output);
      return output;
   }
   return match(0, 0, num);
};
console.log(maxArray(arr1, arr2, num));

コードの説明:

私たちが取ったステップは-

  • 残りのnumが許可されるまでforループを使用します。

  • arr1の番号がarr2よりも大きい場合は、最初にarr1番号を使用しました。それ以外の場合は、arr2numberを使用しました。

  • forループが許可されるまでarr1とarr2の数値が同じである場合、再帰だけを使用して2つの値を比較し、大きい数値を選択しました。

出力

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

になります
[ 9, 8, 6, 3 ]

  1. JavaScriptでリテラルの2つの配列の間で欠落している数を見つける

    問題 arr1とarr2の2つの配列を受け取るJavaScript関数を作成する必要があります。 arr2は、arr1のシャッフルされた複製であり、要素が1つだけ欠落しています。 関数はその1つの要素を見つけて返す必要があります。 例 以下はコードです- const arr1 = [6, 1, 3, 6, 8, 2]; const arr2 = [3, 6, 6, 1, 2]; const findMissing = (arr1 = [], arr2 = []) => {    const obj = {};    for (let i =

  2. JavaScriptの2つの配列からの文字列の長さの最大絶対差

    問題 文字列のa1とa2の2つの配列を受け取るJavaScript関数を作成する必要があります。各文字列は、aからzまでの文字で構成されます。 xを最初の配列の任意の文字列、yを2番目の配列の任意の文字列とします。 関数は-の値を見つける必要があります max(abs(length(x) − length(y))) 例 以下はコードです- const arr1 = ["hoqq", "bbllkw", "oox", "ejjuyyy", "plmiis", "xxxz