使用 JavaScript 查找具有最小和的数组对


问题

我们需要编写一个 JavaScript 函数,该函数分别将两个已排序的整数数组作为第一个和第二个参数,arr1 和 arr2。

该函数的第三个参数将是一个数字,num,num 始终小于两个数组的长度。我们函数的任务是挑选 (num) 对整数。

每对都应该有其第一个元素来自 arr1 而第二个元素来自 arr2。这些对应该挑选,以使这些对具有尽可能小的和。最后,我们的函数应该返回所有这些 (num) 对的数组。

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

const arr1 = [1, 1, 2];
const arr2 = [1, 2, 3];
const num = 2;

那么输出应该是 -

const output = [
   [1, 1], [1, 1]
]

示例

针对此问题的代码如下 -

 在线演示

const arr1 = [1, 1, 2];
const arr2 = [1, 2, 3];
const num = 2;
const smallestPairs = (arr1 = [], arr2 = [], num = 1) => {
   const temp = Array(arr1.length).fill(0);
   const res = [];
   let compute = () => {
      let flag = Infinity;
      for (let i = 0; i < arr1.length; i++) {
         if (temp[i] < arr2.length && flag > (arr1[i] + arr2[temp[i]])) {
            flag = arr1[i] + arr2[temp[i]];
         }
      }
      if (flag === Infinity || res.length >= num) {
         return;
      } else {
         for (let i = 0; i < arr1.length; i++) {
            if (temp[i] < arr2.length && flag == (arr1[i] + arr2[temp[i]])) {
               res.push(Array.of(arr1[i], arr2[temp[i]]));
               temp[i]++;
            }
         }
         compute();
      }
   }
   compute();
   return res.slice(0, num);
};
console.log(smallestPairs(arr1, arr2, num));

输出

而且控制台中的输出将是 -

[ [ 1, 1 ], [ 1, 1 ] ]

更新日期: 18-Mar-2021

145 次浏览

开启你的职业生涯

完成课程以获得认证

开始
广告
© . All rights reserved.