鍍金池/ 問答/HTML/ 求兩個數(shù)組的交,并,差,補有什么復(fù)雜度較低的算法?

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

如題,希望有個復(fù)雜度較低的算法,indexOf,includes本身也是遍歷,算不上復(fù)雜度低。new Set是語法糖,也不能算。用ES5實現(xiàn),不知道有什么復(fù)雜度低于o(n*m)的算法?

回答
編輯回答
替身
2017年8月29日 01:22
編輯回答
挽青絲

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

2017年7月9日 08:48
編輯回答
詆毀你

作為一個前端程序員,我表示不會算法?

2018年5月9日 04:52
編輯回答
別逞強(qiáng)
并 = 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 ]
>
2018年4月23日 20:08