Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
k个序列的排序问题,可以分解为多个两个序列的排序问题。
但是每一次拿哪两个序列出来合并是一个问题。
要减少时间复杂度,二分法是一个不错的选择,log是个好东西
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public static ListNode mergeKLists(ListNode[] lists){
return binary(lists,0,lists.length-1);
}
public static ListNode binary(ListNode[] lists,int s,int e){
if(s==e) return lists[s];
if(s<e){
int q=s + (e-s)/2;
ListNode l1=binary(lists,s,q);
ListNode l2=binary(lists,q+1,e);
return sort2(l1,l2);
}else
return null;
}
public static ListNode sort2(ListNode l1,ListNode l2){
if(l1==null) return l2;
if(l2==null) return l1;
if(l1.val<l2.val){
l1.next=sort2(l1.next,l2);
return l1;
}else{
l2.next=sort2(l1,l2.next);
return l2;
}
}
}