亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何查看一個數組中的每個數字是否在另一個數組中找到平方?

如何查看一個數組中的每個數字是否在另一個數組中找到平方?

qq_笑_17 2022-10-27 16:07:48
給定兩個數組 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)返回真,因為在 b 中,121 是 11 的平方,14641 是 121 的平方,20736 是 144 的平方,361 是 19 的平方,25921 是 161 的平方,依此類推。首先,我只想檢查每個項目并測試平方版本是否存在于另一個數組中。這是我的代碼:function comp(array1, array2){  return array2.every((item)=>{    let a = array1.indexOf((item ** 2));    if(a >=0){      return true;    } else{      return false;    }  })}console.log(comp([121, 144, 19, 161, 19, 144, 19, 11], [121, 14641, 20736, 361, 25921, 361, 20736, 361]));這個例子當然應該返回 true。我的代碼看起來很基本,所以我不確定為什么它不起作用。此外,如果我為第二個數組放置一個空數組,它會返回 false。
查看完整描述

4 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

使用everyand includes,這可以用一個簡單的單線寫成:


const a = [121, 144, 19, 161, 19, 144, 19, 11]

const b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]


const comp = (a, b) => a.length === b.length && a.every(value => b.includes(value ** 2))


console.log(comp(a, b))


非常明確,此函數檢查兩個數組是否具有相同的長度,以及asquared 的每個值是否都包含在b.


查看完整回答
反對 回復 2022-10-27
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

您可以Set檢查array2并檢查每個產品array1。

function comp(array1, array2) {

    const set2 = new Set(array2);

    return array1.every(v => set2.has(v * v));

}


console.log(comp([121, 144, 19, 161, 19, 144, 19, 11], [121, 14641, 20736, 361, 25921, 361, 20736, 361]));



查看完整回答
反對 回復 2022-10-27
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

您的代碼幾乎適用于測試用例。您只需在內部交換數組:


function comp(array1, array2){

  return array1.every((item)=>{

    let a = array2.indexOf((item ** 2));

    if(a >=0){

      return true;

    } else{

      return false;

    }

  })

}

雖然如果我理解正確,即使數組具有不同的長度,或者如果第二個數組的元素不是第一個元素的多重性,只要第一個在第二個中具有一些多重性,這將返回 true:


console.log(comp([2,4,4,2], [4,16]));

// -> true

console.log(comp([2,4], [4,16, 536]));

// -> true

因此,要忠實于前提,避免 indexOf 或包括:


function comp2(A, B){

  if(A.length != B.lengt) return false;

  

  A.sort((a, b) => a-b);

  B.sort((a, b) => a-b);

  

  return A.every((a, i)=>{

    const b = B[i];

    if(a ** 2 == b){

      return true;

    } else{

      return false;

    }

  })

}


console.log(comp2([2,4,4,2], [4,16]));

// -> false

console.log(comp2([2,4], [4,16, 536]));

// -> false

游樂場:https ://jsfiddle.net/alotropico/9ukmL5g3/13/


查看完整回答
反對 回復 2022-10-27
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

使用 every 和 a set 刪除重復項


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

b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]


function compare(a,b){

 a=[...new Set(a)]

 b=new Set(b)

 

 return a.every(x=>b.has(x*x))

   

}


console.log(compare(a,b))


查看完整回答
反對 回復 2022-10-27
  • 4 回答
  • 0 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號