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:spa

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

comp(a,b)返回假,由於在b132不是任何數字的平方acode

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

comp(a,b)返回假,由於在b36100不是任何數字的平方arem

備註

a或者b多是[](全部語言)。 a或者b多是nilnullNone(除了Haskell,Elixir,C ++,Rust)。io

若是abnil(或nullNone),這個問題就沒有意義了那麼返回false。console

若是a或是b空,結果自己就是明顯的。(false)function

過程:剛看的時候以爲是很簡單的,可是一直出問題,主要是沒有理解備註中的話,而後使用的方法也不夠簡便,我是將array1中的數字與array2中的數字相比較,若是符合要求將array2添加到新的 數組之中,在比較數量就能夠了,可是有個問題,就是忘了使用break,加上以後才能獲得響應的數目,以後又遇到一個問題,好比【2,2,3】,與【4,5,6】這樣的組合的時候就會報錯,我只能在每一次比較以後刪除array2中的數字,最終解決了問題。map

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]);不過不是很明白

相關文章
相關標籤/搜索