23 合併k個排序鍊錶C

2021-10-08 20:00:09 字數 1480 閱讀 8704

方法一:簡單方法.時間複雜度o(k^2n),空間複雜度o(1)

class

solution

else

mergehead = mergetemp;

while

(alist&&blist)

else}if

(alist)

mergetemp-

>next = alist;

if(blist)

mergetemp-

>next = blist;

return mergehead;

} listnode*

mergeklists

(vector>

& lists)

for(

auto iter = lists.

begin()

; iter +

1!= lists.

end();

++iter)

else

}return anshead;}}

;

方法二:分治法。時間複雜度o(kn×logk),空間複雜度:因為遞迴了logk次,需要用到o(logk)空間代價的棧空間

class

solution

else

mergehead = mergetemp;

while

(alist&&blist)

else}if

(alist)

mergetemp-

>next = alist;

if(blist)

mergetemp-

>next = blist;

return mergehead;

} listnode*

merge

(vector>

& lists,

int left,

int right)

listnode*

mergeklists

(vector>

& lists)

};

方法三:使用優先佇列。優先佇列中元素不超過k個,優先佇列由二叉堆實現,則插入和刪除的時間代價為o(logk)。最多有kn個點,每個點都被插入刪除一次,則時間複雜度為o(kn×logk)。空間複雜度為o(k).

class

solution};

priority_queue q;

listnode*

mergeklists

(vector>

& lists));

}if(!q.

empty()

));}

anshead = anstail;

while

(!q.

empty()

));}

return anshead;}}

;

23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 偷懶直接複製了以前的堆的 所有看上去長了點 class priorityqueue priority是設定優先順序 true為大根堆 false為...

23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。採用分治法的思想,將 k 個排序鍊錶先合併為 k 2 個鍊錶。依次迴圈,直至合併為1個鍊錶為止。注意 從 k 到 k 2 時,如何定義索引,將每兩個鍊錶合併,而且必須符合奇數 偶數個鍊錶的情況。解決辦法 k n 1 2 list...

23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 暴力法 將所有的節點放在乙個陣列中,然後對陣列排序,最後遍歷陣列,組建新的鍊錶。definition for singly linked list...