题目原文:
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
题目大意:
把K个有序链表合并。
题目分析:
用一个重写比较器的优先队列,保证每次出队的都是最小的节点。
源码:(language:java)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if (lists==null||lists.length==0) return null;
PriorityQueue<ListNode> queue= new PriorityQueue<ListNode>(lists.length,new Comparator<ListNode>(){
@Override
public int compare(ListNode o1,ListNode o2){
if (o1.val<o2.val)
return -1;
else if (o1.val==o2.val)
return 0;
else
return 1;
}
});
ListNode dummy = new ListNode(0);
ListNode tail=dummy;
for (ListNode node:lists)
if (node!=null)
queue.add(node);
while (!queue.isEmpty()){
tail.next=queue.poll();
tail=tail.next;
if (tail.next!=null)
queue.add(tail.next);
}
return dummy.next;
}
}
成绩:
15ms,6.55%,4ms,17.34%
cmershen的碎碎念:
其实较好的办法是归并排序,但我不会写。。。
大概看了一下jdk源码,PriorityQueue的底层好像是Heap……