力扣LeetCode 23 合併K個排序鍊錶

2021-09-24 04:06:04 字數 2554 閱讀 5835

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:輸入:

[1->4->5,

1->3->4,

2->6

]輸出: 1->1->2->3->4->4->5->6

比較好的兩種思路

1、與合併兩個有序鍊錶一樣,k個鍊錶一起從頭往尾走,每次選取k個鍊錶中指標指向位置的最小值,這個最小值使用優先佇列維護較為合適。

2、鍊錶之間兩兩合併,可復用兩個有序鍊錶合併的**。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(lists.

size()

==1)if

(lists.

size()

>1)

lists = liststemp;

return

mergeklists

(lists);}

else

liststemp.

push_back

(lists[lists.

size()

-1])

; lists = liststemp;

return

mergeklists

(lists);}

}return

null;}

listnode*

mergetwolists

(listnode* l1, listnode* l2)

else

if(l1 ==

null

)else

if(l2 ==

null

)else

else

listnode* tans = ans;

while

(t1&&t2)

else

}while

(t1)

while

(t2)

}return ans;}}

;

debug**:

#include

using

namespace std;

struct listnode };

class

solution

if(lists.

size()

==1)if

(lists.

size()

>1)

lists = liststemp;

return

mergeklists

(lists);}

else

liststemp.

push_back

(lists[lists.

size()

-1])

; lists = liststemp;

return

mergeklists

(lists);}

}return

null;}

listnode*

mergetwolists

(listnode* l1, listnode* l2)

else

if(l1 ==

null

)else

if(l2 ==

null

)else

else

listnode* tans = ans;

while

(t1&&t2)

else

}while

(t1)

while

(t2)

}return ans;}}

;int

main()

listnode* l21 =

newlistnode(1

);listnode* l22 =

newlistnode(3

);listnode* l23 =

newlistnode(4

);l21-

>next = l22;

l22-

>next = l23;

listnode* l31 =

newlistnode(2

);listnode* l32 =

newlistnode(6

);l31-

>next = l32;

vector> test;

test.

push_back

(l11)

; test.

push_back

(l21)

; test.

push_back

(l31)

; listnode* ans = s.

mergeklists

(test)

;while

(ans)

return0;

}

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.合併兩個有序鍊錶 這一題相當於上一題的公升級版,從合併的實現方法上來說可以...

Leetcode23 合併K個排序鍊錶

題目 解題思路 這道題使用的是分治演算法。首先還用輔助函式mergetwolists 用來合併兩個有序單鏈表,不申請額外的空間實現原地合併。如下 listnode mergetwolists listnode l1,listnode l2 else head nexthead while l1 nu...