面試題

鏈接:https://www.nowcoder.com/questionTerminal/7f18cb367f824fc79975804b87e4ee84
來源:牛客網

將N條長度均爲M的有序鏈表進行合併,合併以後的鏈表也保持有序,時間複雜度爲()?

a.O(N * M * logN)
b.O(N*M)
c.O(N)
d.O(M)
答案:a
採用堆排序的方法進行合併。
(1)首先取出每個鏈表的第一個元素放在大小爲N的數組中,此處的時間複雜度爲O(N);並調整成爲小根堆,調整堆的時間複雜度爲O(lgN)
(2)取出數組的第一個元素。將該元素所在鏈表的下一個元素放在數組的第一個位置,繼續調整,使之成爲小根堆;
(3)重複(2),如果有一個鏈表已經爲空,則改變數組的大小。
共調整MN-1次,調整堆的時間複雜度爲O(M*N*lgN);建堆的時間複雜度爲O(N);故總的時間複雜度爲 O(M*N*lgN)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章