leetcode題解 23 合併k個排序鍊錶

2021-09-25 22:40:02 字數 1234 閱讀 8863

合併k個排序鍊錶

1.題目分析

1.應該要想起之前合併過兩條鍊錶,那麼我們就可以採用分而治之的方法。

2.可以使用乙個最小堆,把所有的節點都壓入其中,依次取出。

2.示例**

思路一,分而治之

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solutionif(

!node2)

if(node1-

>val < node2-

>val)

else

cur = cur-

>next;

}return head-

>next;

}

listnode*

merge_lists

(vector>

& lists,

int i,

int j)

if(j - i ==1)

int mid = i +

(j - i)/2

; listnode* left =

merge_lists

(lists, i, mid)

; listnode* right =

merge_lists

(lists, mid +

1, j)

;return

merge_two_list

(left, right);}

public

: listnode*

mergeklists

(vector>

& lists)

};

思路二,使用最小堆

class

solution};

listnode*

mergeklists

(vector>

& lists)

listnode* dummy =

newlistnode(0

),*tail = dummy;

while

(!min_heap.

empty()

)return dummy-

>next;}}

;

LeetCode題解 23 合併K個排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6想到兩個鍊錶合併,每次找最小的頭結點,作為新的頭結點,遞迴查詢後面的鍊錶。ps 注意空鍊錶的處理,採用跳過,何時進行遞迴?找到最小的頭結點,就需要遞...

LeetCode 23 合併 K個排序序列

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 解題思路 採用分治的思想,將 k 個鍊錶的合併問題轉換成,合併 2 個有序鍊錶的問題 typedef struct listnode list 定...

leetcode 23 合併K排序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 解析 看到這一題,馬上就能想到之前的合併兩個鍊錶leetcode 21.合併兩個有序鍊錶 這一題相當於上一題的公升級版,從合併的實現方法上來說可以...