在 JavaScript 中遞增兩個序列


嚴格遞增序列

僅當 arr[0] < arr[1] < arr[2] < ... < arr[arr.length - 1] 時,序列才嚴格遞增

問題

我們需要編寫一個 JavaScript 函式,它分別接受兩個數字陣列 arr1 和 arr2 作為第一個和第二個引數。

我們可以交換 arr1 中任意數量發生在相同索引上的元素到 arr2。這意味著我們可以交換 arr1[i] 和 arr2[i]。我們的函式應該返回使這兩個序列嚴格遞增所需的最小交換次數。

例如,如果輸入函式的是

輸入

const arr1 = [1, 3, 5, 4];
const arr2 = [1, 2, 3, 7];

輸出

const output = 1;

輸出說明

因為如果我們交換 arr1[3] 和 arr2[3],這兩個陣列都將變得嚴格遞增。

示例

以下為程式碼 -

 線上演示

const arr1 = [1, 3, 5, 4];
const arr2 = [1, 2, 3, 7];
const findSwaps = (arr1 = [], arr2 = []) => {
   let map = {
      true: 1,
      false: 0,
   };
   for (let i = 1; i < arr1.length; i++) {
      const current = {
         true: Infinity,
         false: Infinity,
   }
   if (arr1[i] > arr2[i - 1] && arr2[i] > arr1[i - 1]) {
      current.true = Math.min(
      current.true,
      map.false + 1,
   )
   current.false = Math.min(
      current.false,
      map.true)
   }
   if (arr2[i] > arr2[i - 1] && arr1[i] > arr1[i - 1]) {
      current.true = Math.min(
         current.true,
         map.true + 1,
      )
      current.false = Math.min(
         current.false,
         map.false)
      }
      map = current
   }
   return Math.min(
      map.false,
      map.true)
}
console.log(findSwaps(arr1, arr2));

輸出

1

更新於: 24-4-2021

124 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.