📅  最后修改于: 2023-12-03 14:55:47.256000             🧑  作者: Mango
有时候我们需要检查一个数组能否通过交换由另一个数组中不相等元素组成的索引对来排序。这种情况下我们可以使用以下方法:
首先判断两个数组的长度是否相等,如果不相等,直接返回 false。
接着遍历两个数组,记录每个元素第一次出现时的索引。
// arr1: [4, 1, 2, 3]
// arr2: [1, 3, 2, 4]
let arr1Index = new Map();
let arr2Index = new Map();
for (let i = 0; i < arr1.length; i++) {
if (!arr1Index.has(arr1[i])) {
arr1Index.set(arr1[i], i);
}
if (!arr2Index.has(arr2[i])) {
arr2Index.set(arr2[i], i);
}
}
for (let i = 0; i < arr1.length; i++) {
const a = arr1[i];
const b = arr2[i];
if (arr1Index.get(a) !== arr2Index.get(b)) {
return false;
}
}
完整代码如下:
function canBeSortedBySwap(arr1, arr2) {
if (arr1.length !== arr2.length) {
return false;
}
let arr1Index = new Map();
let arr2Index = new Map();
for (let i = 0; i < arr1.length; i++) {
if (!arr1Index.has(arr1[i])) {
arr1Index.set(arr1[i], i);
}
if (!arr2Index.has(arr2[i])) {
arr2Index.set(arr2[i], i);
}
}
for (let i = 0; i < arr1.length; i++) {
const a = arr1[i];
const b = arr2[i];
if (arr1Index.get(a) !== arr2Index.get(b)) {
return false;
}
}
return true;
}
使用示例:
const arr1 = [4, 1, 2, 3];
const arr2 = [1, 3, 2, 4];
console.log(canBeSortedBySwap(arr1, arr2)); // true