这是完整的问题描述
给定两个数组 a 和 b,编写一个函数 comp(a, b)(Clojure 中的 compSame(a, b))来检查这两个数组是否具有“相同”元素以及相同的重数。这里,“相同”意味着 b 中的元素是 a 平方中的元素,无论顺序如何。
Examples
有效数组
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
comp(a, b)
回报true
因为在b
:
- 121 是 11 的平方,
- 14641 是 121 的平方,
- 20736 144的平方,
- 第361章 19的平方,
- 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
may not return 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 的平方。
Remarks
-
a
or b
可能[]
(所有语言)。
-
a
or b
可能nil
or null
or None
(Haskell、Elixir、C++、Rust 除外)。
- If
a
or b
are nil
(或 null 或 None),问题没有意义,所以返回false
.
- If
a
or b
are empty结果是显而易见的。
C 注释
- 这两个数组具有相同的大小 (> 0),作为函数 comp 中的参数给出。
我的问题:
您能提供一个我不符合所需规格的测试用例吗?
我陷入了 1 项基本测试未通过的困境(预计
结果:true,但我的代码返回 false)
我的代码尝试
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;
}