23 合併K個公升序鍊錶

2021-10-21 23:56:15 字數 1134 閱讀 7595

題目描述:

給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。

請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。

示例 1:

輸入:lists = [[1,4,5],[1,3,4],[2,6]]

輸出:[1,1,2,3,4,4,5,6]

解釋:鍊錶陣列如下:

[1->4->5,

1->3->4,

2->6

]將它們合併到乙個有序鍊錶中得到。

1->1->2->3->4->4->5->6

解題思路:

1、按照正常的思路,先定義乙個合併兩個鍊錶的函式,在將陣列中的鍊錶兩兩合併。

**如下:

class

solution

else

} listnode*

mergeklists

(vector>

& lists)

return p;}}

;

2、借用優先佇列,將所有的節點壓到優先佇列中,再將鍊錶組合起來(小頂堆)

class

solution}if

(q.empty()

)return

nullptr

; listnode* head=

newlistnode

(q.top()

);q.

pop();

listnode* p = head;

while

(!q.

empty()

)return head;}}

;

3、使用歸併排序,將陣列(陣列裡面存放的是有個鍊錶)首先進行分割,再一次歸併即可。

class

solution

else

} listnode*

merge

(vector>

& lists,

int left,

int right)

listnode*

mergeklists

(vector>

& lists)

};

23 合併K個公升序鍊錶

給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。示例 1 輸入 lists 1,4,5 1,3,4 2,6 輸出 1,1,2,3,4,4,5,6 解釋 鍊錶陣列如下 1 4 5,1 3 4,2 6 將它們合併到乙個有序鍊錶中得到。1 1 2 3 ...

23 合併K個公升序鍊錶

給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。示例 1 輸入 lists 1,4,5 1,3,4 2,6 輸出 1,1,2,3,4,4,5,6 解釋 鍊錶陣列如下 1 4 5,1 3 4,2 6 將它們合併到乙個有序鍊錶中得到。1 1 2 3 ...

23 合併K個公升序鍊錶

這道題,用歸併可太秀了。學習一下鍊錶歸併的寫法 遞迴,最好也要知道飛遞迴寫法 關於對鍊錶歸併遞迴解法的理解,這一篇講得好 一看就會,一寫就廢?詳解遞迴 非遞迴解法就是迭代,穿針引線,改變指標。最好設定乙個哨兵節點,操作方便。在 21.合併兩個有序鍊錶 這一題中自己寫了一遍,感覺不夠優雅,看看別人是怎...