10:Are they the "same"?他们是相同的吗?

给定两个数组ab写入一个函数comp(a, b)compSame(a, b)在Clojure中),它检查两个数组是否具有相同的多项式的“相同”元素。“同样”的意思是,这里b的元素是a平方的元素,不管命令如何。

例子

有效数组

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

comp(a, b)返回真实,因为b121是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可能不会再返回true:

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

comp(a,b)返回假,因为在b132不是任何数字的平方a

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

comp(a,b)返回假,因为在b36100不是任何数字的平方a

备注

a或者b可能是[](所有语言)。 a或者b可能是nilnullNone(除了Haskell,Elixir,C ++,Rust)。

如果abnil(或nullNone),这个问题就没有意义了那么返回false。

如果a或是b空,结果本身就是明显的。(false)

过程:刚看的时候觉得是很简单的,但是一直出问题,主要是没有理解备注中的话,然后使用的方法也不够简便,我是将array1中的数字与array2中的数字相比较,如果符合要求将array2添加到新的 数组之中,在比较数量就可以了,但是有个问题,就是忘了使用break,加上之后才能得到响应的数目,之后又遇到一个问题,比如【2,2,3】,与【4,5,6】这样的组合的时候就会报错,我只能在每一次比较之后删除array2中的数字,最终解决了问题。

function comp(array1, array2){
//your code here
var arr=[];
console.log(array1,array2)
if(array1==[]&&array2==[]){
return false;
}
if(array2==null||array1==null){
return false;
}

console.log(array1,array2)
if(array1.length==array2.length){
for(var i=0;i<array1.length;i++){
for(var j=0;j<array2.length;j++){
if(array1.length==0&&array2.length==0){
return false;
}else{
if(array1[i]*array1[i]==array2[j]){
arr.push(array2[j]);
array2.splice(j,1)
break;
}
}
}
}
}
if(arr.length==array1.length){
return true;
}else{
return false;
}
}

这是这种方法并不是太简便,甚至可以说是啰嗦,下面是简易版本:

function comp(array1, array2) {
if(array1 == null || array2 == null)
return false;
array1.sort((a, b) => a - b);
array2.sort((a, b) => a - b);
return array1.map(v => v * v).every((v, i) => v == array2[i]);
不过不是很明白

posted on 2017-07-27 15:20  城南北  阅读(667)  评论(0编辑  收藏  举报

导航