Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
这题一开始一直TLE。后来查了下,发现是因为
/**
* 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.length==0) return null;
int n = lists.length;
while(n>1) {
int k = 0;
int i =0; int j = n-1;
//一开始是写的for(int i = 0; i<n-1; i=i+2);但是n的值其实是一直在变动的。
//假如一开始n =4,则会在跑完第一次之后,n=3,i<2 判断条件i<n-1=2不成立,不进入循环。
for( i = 0,j = n-1; i<j; i++,j--) {
lists[k] = merge2Lists(lists[i],lists[j]);
n--;
k++;
}
//其实不加也可以。主要是提醒自己,考虑的时候不要遗漏n为单数的情况。
if(i==j) lists[k] = lists[i];
}
return lists[0];
}
private ListNode merge2Lists(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode p = head;
while(l1!=null&&l2!=null) {
if(l1.val<l2.val) {
p.next = l1;
l1 = l1.next;
} else {
p.next = l2;
l2 = l2.next;
}
p = p.next;
}
if(l1!=null) {
p.next = l1;
}
if(l2!=null) {
p.next = l2;
}
return head.next;
}
}