在 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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始
广告