您的位置:首页 > 编程语言 > Java开发

[Leetcode] Merge k Sorted Lists (Java)

2013-12-26 17:03 465 查看
Merge k sorted
linked lists and return it as one sorted list. Analyze and describe its complexity.

就用了最普通的merge sort 用了k-1次,复杂度为O(n*k2)

import java.util.ArrayList;

public class MergekSortedLists {
static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists.isEmpty())
return null;
ListNode temp = lists.get(0);
ListNode res = new ListNode(-1);
res.next = temp;
ListNode index = res;
for(int i=1;i<lists.size();i++) {
ListNode t = lists.get(i);
while(temp!=null&&t!=null){
if(temp.val<t.val){
ListNode tt = new ListNode(temp.val);
index.next = tt;
index = tt;
temp = temp.next;
}else {
ListNode tt = new ListNode(t.val);
index.next = tt;
index = tt;
t = t.next;
}
}
while(temp!=null){
ListNode tt = new ListNode(temp.val);
index.next = tt;
index = tt;
temp = temp.next;
}
while(t!=null) {
ListNode tt = new ListNode(t.val);
index.next = tt;
index = tt;
t = t.next;
}
temp = res.next;
index = res;
}
return res.next;
}
public static void main(String[] args) {
ArrayList<ListNode> lists = new ArrayList<ListNode>();
lists.add(new ListNode(1));
System.out.println(new MergekSortedLists().mergeKLists(lists).val);
}
}


如果k很大,k个链表一起用对最小堆会快一些,复杂度为O(k*logk*n),写起来比较麻烦,不写了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: