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

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

求兩個數組的交,并,差,補有什么復雜度較低的算法?

求兩個數組的交,并,差,補有什么復雜度較低的算法?

慕田峪9158850 2019-02-19 17:14:25
如題,希望有個復雜度較低的算法,indexOf,includes本身也是遍歷,算不上復雜度低。new Set是語法糖,也不能算。用ES5實現,不知道有什么復雜度低于o(n*m)的算法?
查看完整描述

2 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

兩個數組的交并差補本來就是個復雜的問題,你還沒限定數組的元素是啥,對象你要不要判等?數字和字符串能不能隱式轉換?set是寫進規范里的,為啥算語法糖?只能用es5,還不能用indexOf,includes,我就不知道用哪些算復雜度低?
最關鍵
還要復雜度低于o(nm) 復雜度低于o(nm) 復雜度低于o(n*m)
在沒給出任何條件卻給出這么多限定條件的情況下
題主你想想吧,反正我能力有限,想不出來。
要不你寫出來讓大家瞅瞅,大家伙給你點贊~(^o^)/~

查看完整回答
反對 回復 2019-02-25
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

并 = function(A, B) {

    d = {}

    set = []

    for (k in A) {

        if (!(A[k] in d)){set.push(A[k])}

        d[A[k]] = k

    }

    for (k in B) {

        if (!(B[k] in d)){set.push(B[k])}

        d[B[k]] = k

    }

    return set

}


交 = function(A, B) {

    d = {}

    set = []

    for (k in A) {

        d[A[k]] = k

    }

    for (k in B) {

        if (B[k] in d){set.push(B[k])}

        d[B[k]] = k

    }

    return set

}


差 = function(A, B) {

    d = {}

    set = []

    for (k in B) {

        d[B[k]] = k

    }

    for (k in A) {

        if (!(A[k] in d)){set.push(A[k])}

        d[A[k]] = k

    }

    return set

}

補 = function(A, B) {

    return 差(B, A)

}

> 并([1,2],[1,3,5])

[ 1, 2, 3, 5 ]

> 差([1,2],[1,3,5])

[ 2 ]

> 交([1,2],[1,3,5])

[ 1 ]

> 補([1,2],[1,3,5])

[ 3, 5 ]

>


查看完整回答
反對 回復 2019-02-25
  • 2 回答
  • 0 關注
  • 664 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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