gpt4 book ai didi

javascript - 比较两个数组中元素的相等性

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:39:53 26 4
gpt4 key购买 nike

我有一个任务,我应该用整数检查两个数组(未排序),看看是否

  1. 它们的长度相同
  2. 第一个元素包含整数,第二个元素包含相同值的平方,顺序不限

例如:

test([5,4,1], [1,16,25]) // would return true ..

到目前为止,我所做的是首先对两个输入数组进行排序,然后比较长度。一旦我们确认长度相同,我们将遍历每个值以确保它们相等。请记住,我还没有将这些值与它们的平方对应值进行比较,因为我的循环没有给我预期的结果。这是代码:

function test(arr1, arr2){
// sort arrays
const arr1Sort = arr1.sort(),
arr2Sort = arr2.sort();

// compare length and then compare values
if(arr1Sort.length === arr2Sort.length) {
for(let i = 0; i < arr1Sort.length; i++) {
if(arr1Sort[i] === arr2Sort[i]) {
return true;
} else {
return false;
}
}
}
}

console.log(test([1,2,3], [1,5,4])); returns true but the array values are different?!

最佳答案

for中,无论ifelse是否成立,函数都会立即返回true 或在第一次迭代时为 false - 它永远不会超过索引 0。首先,返回 true循环结束后,返回 false 如果 arr1Sort[i] ** 2 != = arr2Sort[i](检查第一个平方是否等于第二个)。

此外,在排序时,请确保使用回调函数来比较每个项目的差异,否则,.sort 将按字典顺序 排序(例如,[1, 11, 2]):

function comp(arr1, arr2){
// sort arrays
const sortCb = (a, b) => a - b;
const arr1Sort = arr1.sort(sortCb),
arr2Sort = arr2.sort(sortCb);

// compare length and then compare values
if(arr1Sort.length !== arr2Sort.length) {
return false;
}
for(let i = 0; i < arr1Sort.length; i++) {
if(arr1Sort[i] ** 2 !== arr2Sort[i]) {
return false;
}
}
return true;
}

console.log(comp([1,2,3], [1,5,4]));
console.log(comp([5,4,1], [1,16,25]));

通过将 arr2 转换为索引对象,您可以将计算复杂度降低到 O(N) 而不是 O(N log N)预先乘以平方数:

function comp(arr1, arr2){
if (arr1.length !== arr2.length) {
return false;
}
const arr2Obj = arr2.reduce((a, num) => {
a[num] = (a[num] || 0) + 1;
return a;
}, {});
for (let i = 0; i < arr1.length; i++) {
const sq = arr1[i] ** 2;
if (!arr2Obj[sq]) {
return false;
}
arr2Obj[sq]--;
}
return true;
}

console.log(comp([1,2,3], [1,5,4]));
console.log(comp([5,4,1], [1,16,25]));

(如果不允许重复,使用 Set 会容易很多,但不幸的是)

关于javascript - 比较两个数组中元素的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com