他们是"same"吗?代码战争



>这是完整的问题描述

给定两个数组 a 和 b 写一个函数 comp(a, b((Clojure 中的 compSame(a, b((,用于检查两个数组是否具有"相同"的元素,具有相同的多重性。"相同"在这里意味着b中的元素是平方中的元素,无论顺序如何。

例子

有效数组

a = [121, 144, 19, 161, 19, 144, 19, 11]  
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]

comp(a, b)返回true,因为在b

  1. 121是11的平方,
  2. 14641是121的平方,
  3. 20736 144的平方,
  4. 361 19的平方,
  5. 25921 161的平方,依此类推。

如果我们用平方来写 b 的元素,这一点会很明显:

无效数组

a = [121, 144, 19, 161, 19, 144, 19, 11] 
b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]

如果我们将第一个数字更改为其他数字,comp可能不会再返回true

a = [121, 144, 19, 161, 19, 144, 19, 11]  
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]

comp(a,b)返回false因为在b中,132 不是任意个数a的平方。

a = [121, 144, 19, 161, 19, 144, 19, 11]  
b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361]

comp(a,b)返回false因为在b中,36100 不是任意数 a 的平方。

言论

  1. ab可能[](所有语言(。
  2. ab可能是nilnullNone(Haskell,Elixir,C++,Rust除外(。
  3. 如果abnil(或 null 或 None(,则问题没有意义,因此返回false
  4. 如果ab为空,则结果本身就很明显。

C 语言注意事项

  1. 这两个数组具有相同的大小 (> 0( 作为函数 comp 中的参数给出。

我的问题:

你能想出一个我不符合要求的测试用例吗 规格??

我被困在 1 个基本测试未通过(预期 结果:真,但我的代码返回假(

我的代码尝试

function isTrue(el){
return el === true;
}
function comp(array1, array2){
if(array1.length === 0 || array2.length === 0){
return false;
}
var arr = array1.map(function(num){return num*num});
var arr2 = [];
for(var i = 0; i < arr.length; i++){
if(array2.includes(arr[i])){
arr2.push(true);
var a = array2.indexOf(arr[i]);
array2.splice(a,1);
} else{
arr2.push(false);
}
}
return arr2.includes(false) ? false : true;
}

最简单的方法:

const comp = (a1, a2) => {
if (!a1 || !a2 || a1.length !== a2.length) return false;
return a1.map(x => x * x).sort().toString() === a2.sort().toString();
}

相关内容

  • 没有找到相关文章

最新更新