题目
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.
分析
经典问题:k路归并,用一个大小为k小根堆保存每个链表的至多一个节点(链表空时,就没节点了),每次取出最小的节点,并插入该节点在链表中的下一个节点(如果不为空),直至取完所有链表节点。
这题在阿里巴巴2014实习生笔试中对应一道填空题,问M个长度为N的有序链表排序的时间复杂度:O(M*N*lgM)
代码
import java.util.ArrayList; import java.util.Comparator; import java.util.PriorityQueue; public class MergeKSortedLists { public ListNode mergeKLists(ArrayList<ListNode> lists) { if (lists == null || lists.size() == 0) { return null; } PriorityQueue<ListNode> pq = new PriorityQueue<ListNode>(lists.size(), new Comparator<ListNode>() { @Override public int compare(ListNode ln1, ListNode ln2) { return ln1.val - ln2.val; } }); // init for (ListNode head : lists) { if (head != null) { pq.add(head); } } // merge ListNode dummy = new ListNode(0); ListNode p = dummy; while (!pq.isEmpty()) { p.next = pq.poll(); p = p.next; if (p.next != null) { pq.offer(p.next); } } return dummy.next; } }
LeetCode | Merge k Sorted Lists,布布扣,bubuko.com
LeetCode | Merge k Sorted Lists
原文:http://blog.csdn.net/perfect8886/article/details/22917473