在 JavaScript 中从两个数组中查找最大数

问题

我们需要编写一个 JavaScript 函数,该函数接受代表两个数字的两个单位数字数组,arr1 和 arr2 作为第一个和第二个参数。该函数的第三个参数将是一个数字,

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

我们的函数应该返回一个长度为 num 的个位数的新数组,它本身代表一个数字。并且数字应该是我们可以使用两个数组中的元素创建的最大数量,我们唯一的条件是我们必须保留来自同一数组的元素的相对顺序。

例如,如果函数的输入是 -

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));

代码说明:

我们采取的步骤是 -

  • 用于循环直到允许剩余数量。

  • 如果 arr1 的数字大于 arr2,我们首先使用 arr1 数字,否则我们使用 arr2 数字。

  • 当 arr1 和 arr2 在允许 for 循环之前具有相同的数字时,我们仅使用递归来比较两个值,并选择较大的数字。

输出结果

控制台中的输出将是 -

[ 9, 8, 6, 3 ]

以上是 在 JavaScript 中从两个数组中查找最大数 的全部内容, 来源链接: utcz.com/z/357875.html

回到顶部