Description
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example
input::[1->4->5, 1->3->4, 2->6]
output: 1->1->2->3->4->4->5->6
解题思路
承接 #21 的解题思路,通过k个指向各个list的指针,每次找到最小的那个数放在answer之后,全部走完返回answer就是最终结果了
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
int i;
ListNode t = new ListNode(0);
ListNode h = t;
List<ListNode> ls = new ArrayList<>(Arrays.asList(lists));
int ls_num = ls.size();
for(i = 0; i < ls_num; i++)
if(lists[i] != null)
break;
if(i == ls_num)
return t.next;
if(ls_num == 1 && lists[0] == null)
return t.next;
while(ls_num != 0){
int small_pos = -1;
int small_number = 99999;
for(i = 0; i < ls.size(); i++){
if(lists[i] == null)
continue;
int val = lists[i].val;
if(val < small_number){
small_pos = i;
small_number = val;
}
}
if(small_pos == -1)
break;
t.next = new ListNode(small_number);
t = t.next;
lists[small_pos] = lists[small_pos].next;
if(lists[small_pos] == null)
ls_num --;
}
return h.next;
}
}
但是需要考虑很多很多很多很多问题
这套代码我经历了8次RumTime Error……才有上面这份代码,而且自从我自己修改了input之后,我就记不住之前的input长什么样了,leetcoce就疯狂给我报unsupported operation exception 暴风哭泣
具体要考虑的有
- [[[]]]
- [[], []]
- []
- [[], [1]]
还有部分忘记了……反正就是各种边界值
结果跑下来还355ms
今天是悲伤皮儿
然后换了种之前一直想尝试的作弊解法hhhhh
把所有的list读进arraylist里面,然后用Collections.sort对arraylist进行排序,再重新构建一个新的listnode用于返回
时间居然比上面短!
还不是一点点
18ms……
好的我自闭了
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
int i;
List<Integer> list = new ArrayList<>();
ListNode answer = new ListNode(0);
ListNode temp = answer;
for(i = 0; i < lists.length; i++){
ListNode t = lists[i];
while(t != null){
list.add(t.val);
t = t.next;
}
}
Collections.sort(list);
for(i = 0; i < list.size(); i++){
temp.next = new ListNode(list.get(i));
temp = temp.next;
}
return answer.next;
}
}
我究竟是为什么才要经历8次RunTime Error去处理边界啦!
QuQ
这次没有其它了