使用 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 次瀏覽

開啟你的職業生涯

完成課程以獲得認證

開始
廣告