4 回答

TA贡献1831条经验 获得超4个赞
您可以使用 aSet并将第一个数组映射到该值以及对该集合的该值的检查。
function checkMatch(a, b) {
var values = new Set(b);
return a.map(v => v + values.has(v));
}
console.log(checkMatch([2, 9], [2, 5, 9]));

TA贡献1784条经验 获得超9个赞
你可以简单地利用map这里:
var array1 = [2, 9];
var array2 = [2, 5, 9];
var result = array1.map(n=>(array2.includes(n) ? n++ : n, n));
console.log(result);

TA贡献1806条经验 获得超8个赞
您可以使用includes方法检查列表 (a) 的所有元素是否存在于您需要比较的所有其他数组中。然后您可以更新列表(a)中的值
function checkMatch(a, b){
for (let i = 0; i < a.length; i++) {
if(b.includes(a[i])){
a[i]++;
}
}
return a;
};
const array1 = [2, 9];
const array2 = [2, 5, 9];
console.log(checkMatch(array1, array2))

TA贡献1772条经验 获得超8个赞
如果您知道所有数组都已排序,那么您可以使用以下方法 -
代码 -
const array1 = [2, 9];
const array2 = [2, 5, 9];
function checkMatch(a, b) {
let i = 0,
j = 0;
while (i < a.length && j < b.length) {
if (a[i] === b[j]) {
a[i]++;
j++;
} else if (a[i] < b[j]) {
i++;
} else j++;
}
return a;
}
console.log(checkMatch(array1, array2))
解释 -
上述方法的时间复杂度为 ,O(N+M)
而您的时间复杂度可能为O(N*M)
.
在上述函数中,您利用了数组已排序这一事实。因此,当 时a[i] < b[j]
,您知道必须增加索引 i 才能获得可能等于或大于 的值b[j]
。当 时,情况相同(但相反)a[i] > b[j]
。因此,这种方法降低了代码的整体时间复杂度,并提高了整体效率。
希望这可以帮助!
添加回答
举报