LeetCode 23 Merge k Sorted Lists

来源:互联网 发布:正规淘宝刷平台软件 编辑:程序博客网 时间:2024/04/28 19:57

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

思路就是,采用分治法,把有序链表逐渐分成左右两部分,将左右两部分再分治,最后左右两部分各自成为有序链表,再进行合并。

还有种思路是采用最小优先队列。由于效率也不高,所以这里也不晒代码了。

Runtime: 4 ms

public ListNode mergeKLists(ListNode[] lists) {if (lists.length == 0) return null;return mergeKLists(lists, 0, lists.length - 1);}public ListNode mergeKLists(ListNode[] lists, int l, int r) {if (l >= r) return lists[l];//if (l > r) return null;int mid = (r + l) / 2;return merge2Lists(mergeKLists(lists, l, mid), mergeKLists(lists, mid + 1, r));}public ListNode merge2Lists(ListNode l1, ListNode l2) {if (l1 == null) return l2;if (l2 == null) return l1;if (l1.val > l2.val) {l2.next = merge2Lists(l1, l2.next);return l2;} else {l1.next = merge2Lists(l1.next, l2);return l1;}}



public ListNode mergeKLists2(ListNode[] lists) {int len = lists.length;if (len == 0) return null;if (len == 1) return lists[0];int l1 = len / 2, l2 = len - l1;ListNode[] left = new ListNode[l1], right = new ListNode[l2];System.arraycopy(lists, 0, left, 0, l1);System.arraycopy(lists, l1, right, 0, l2);ListNode p1 = mergeKLists(left), p2 = mergeKLists(right);ListNode head = new ListNode(0), dummy = head;while (p1 != null && p2 != null) {if (p1.val <= p2.val) {head.next = p1;p1 = p1.next;} else {head.next = p2;p2 = p2.next;}head = head.next;}if (p1 != null) head.next = p1;if (p2 != null) head.next = p2;return dummy.next;}


0 0
原创粉丝点击