求兩個(gè)已排序數(shù)據(jù)的交集和并集,要求時(shí)間復(fù)雜度為O(m+n).
A數(shù)組和B數(shù)組,A數(shù)組大小為m,B數(shù)組大小為n。 1、查找B數(shù)組的每個(gè)成員是否在A數(shù)組中,時(shí)間復(fù)雜度為O(mn) 2、由于A和B數(shù)組都是有序數(shù)組,使用二分法查找B數(shù)組的每個(gè)成員是否在A數(shù)組中,時(shí)間復(fù)雜度為O(n*lgm)。如果n比m大,則查找A數(shù)組的成員是否在B數(shù)組中,時(shí)間復(fù)雜度為O(m*lgn)。 3、使用hash表,將A數(shù)組的值使用hash表保存,B中的值判斷是否存在A中,由于hash表的查找時(shí)間復(fù)雜度為O(1),所以該算法的時(shí)間復(fù)雜度為O(n)。但是此方法只適合m比較小的情況,如果A數(shù)組比較大,hash表容易產(chǎn)生collision的情況,hash表的查找平均速度將不再是O(1)。 4、使用兩個(gè)指針分別指向數(shù)組A和數(shù)組B,指向數(shù)據(jù)小的指針往前繼續(xù)移動(dòng),保存兩個(gè)指針指向相同數(shù)據(jù)的值,直到兩個(gè)指針都指向數(shù)組末尾,該算法的時(shí)間復(fù)雜度為O(m+n)。
交集就是保存兩個(gè)指針指向相同的值,并集就是保存兩個(gè)指針指向不同的值,并且保存一份指向相同的值
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注