[LeetCode] 23. Merge k Sorted Lists

K ordered merge list. That is the subject of the meaning of problems, examples,

Example:

Input:
[
  1->4->5,
  1->3->4,
  2->6
]
Output: 1->1->2->3->4->4->5->6

Optimal solution to this problem should be solved but as a priority queue PQ JS achieve too much trouble, so I am here to give sub-optimal solution, with 21. Merge Two Sorted Lists idea of divide and conquer to do.

Time O (nlogk) - k is the number of list

Space O (n)

 1 /**
 2  * @param {ListNode[]} lists
 3  * @return {ListNode}
 4  */
 5 var mergeKLists = function (lists) {
 6     return divide(lists, 0, lists.length - 1);
 7 };
 8 
 9 var divide = function (lists, start, end) {
10     if (start === end) {
11         return lists[start];
12     } else if (start < end) {
13         const mid = parseInt(start + (end - start) / 2);
14         const left = divide(lists, start, mid);
15         const right = divide(lists, mid + 1, end);
16         return merge(left, right);
17     } else {
18         return null;
19     }
20 }
21 
22 var merge = function (left, right) {
23     if (!left) {
24         return right;
25     } else if (!right) {
26         return left;
27     } else if (left.val < right.val) {
28         left.next = merge(left.next, right);
29         return left;
30     } else {
31         right.next = merge(left, right.next);
32         return right;
33     }
34 }

 

Guess you like

Origin www.cnblogs.com/aaronliu1991/p/12239444.html