在 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
广告