23. 合併k個公升序鍊錶方法一:分治策略
/**
* definition for singly-linked list.
* public class listnode
* listnode(int val)
* listnode(int val, listnode next)
* }*///執行用時:2 ms,記憶體消耗:40.4 mb
class
solution
int step =1;
//間隔
while
(stepstep =
2*step;
}return lists[0]
;}//二個有序列表合併
public listnode mergetwolists
(listnode l1, listnode l2)
if(l2 == null)
listnode dummy_head =
newlistnode(0
);listnode curr_point = dummy_head;
while
(l1!=null && l2!=null)
else}if
(l1 == null)
if(l2 == null)
return dummy_head.next;
}}
方法二:優先順序佇列(小頂堆)//執行用時:5 ms,記憶體消耗:40.3 mb
public listnode mergeklists(listnode lists)
listnode dummy_head = new listnode(0);
listnode curr_point = dummy_head;
//例項化乙個優先順序佇列,建立乙個比較器作為其形參,比較器在作用是告訴佇列排序的規則
priorityqueuequeue = new priorityqueue<>((listnode node1 , listnode node2)->);
for(listnode node : lists)
//如果小頂堆還存在節點,就把堆頂元素(即val值最小的節點)彈出,如果彈出的節點的next存在,則把其next指向的節點加入到堆中
while(!queue.isempty())
}return dummy_head.next;
}
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...
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 ...