这里是完整的问题说明
给定两个数组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
:
如果我们用正方形来编写b&#39的元素,那就显而易见了:
无效数组
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
可能 不再<{1}}:
true
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [132, 14641, 20736, 361, 25921, 361, 20736, 361]
会返回comp(a,b)
,因为在false
中,132不是任意数量b
的平方。
a
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 36100, 25921, 361, 20736, 361]
返回comp(a,b)
,因为在false
中,36100不是任意数量的平方。
说明
b
或a
可能是b
(所有语言)。 []
或a
可能是b
或nil
或null
(Haskell,Elixir,C ++,Rust除外)。None
或a
为b
(或为空或无),则问题无效,请返回nil
。false
或a
为空,结果就会很明显。注意C
我的问题:
你能想出一个我不符合要求的测试用例吗? specefications?
我被困在1个未通过的基本测试中(预期 result:true但我的代码返回false)
MY CODE ATTEMPT
b
答案 0 :(得分:4)
最简单的方法:
const comp = (a1, a2) => {
if (!a1 || !a2 || a1.length !== a2.length) return false;
return a1.map(x => x * x).sort().toString() === a2.sort().toString();
}