2. 優化的優先佇列
3. 兩兩合併
給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。
請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。
示例 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
示例 2:
輸入:lists =
輸出:[
]
示例 3:
輸入:lists =[[
]]輸出:[
]
優先佇列的主要思路:
public listnode mergeklists
(listnode[
] lists)})
;for
(listnode nodes : lists)}
listnode pre =
newlistnode(0
);listnode cur = pre;
while
(!queue.
isempty()
) cur.next = null;
return pre.next;
}
優化後的主要思路:
public listnode mergeklists2
(listnode[
] lists)})
;for
(listnode nodes : lists)}
listnode pre =
newlistnode(0
);listnode cur = pre;
while
(!queue.
isempty()
)}cur.next = null;
return pre.next;
}
主要思路:
備註:此處也可以採用第乙個鍊錶與第二個鍊錶合併,之後與第三個鍊錶合併,之後與第四個鍊錶合併,直到最後;這種執行時間較長達到200多毫秒。
public listnode mergeklists3 (listnode[
] lists)
listnode merge
(listnode[
] lists,
int begin,
int end)
// 兩個鍊錶合併
listnode mergetwolist
(listnode l1, listnode l2)
if(l1.val <= l2.val)
else
合併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 ...
LeetCode 合併K個公升序鍊錶
原題鏈結 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 將它們合併到...