您的位置:首页 > 其它

LeetCode 23 Merge k Sorted Lists 高空间消耗解法与堆的解法,还需要学习堆的做法

2016-06-08 00:00 519 查看
Merge k Sorted Lists

Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

解法思路:我的想法是,首先利用O(n^2)的遍历,将所有值存到整型数组当中,将数组排序,输出到一个新的链表当中,思路非常清晰,效率也还不错。但是这样的算法有着较高的内存开销,并且没有利用链表的特性。因此,不提倡这种类似于作弊的算法。虽然能够解决K-lists类的问题,但是,对于内存有要求的情景下,该算法就面临较大的考验。

代码如下:

public ListNode mergeKLists(ListNode[] lists) {
if(lists.length==0){
return null;
}
int []num = new int[5000];
int index=0;
for (int i = 0; i < lists.length; i++) {
ListNode l = lists[i];
while(l!=null){
num[index]=l.val;
l = l.next;
index++;
}
}
if(index==0){
return null;
}
Arrays.sort(num,0,index);
ListNode temp1 = new ListNode(-1);// l1 l2 首尾相连 然后冒泡
ListNode t1 = temp1;
int i =0;
while(i!=index){
temp1.val = num[i++];
if(i!=index){
temp1.next = new ListNode(0);
}
temp1 = temp1.next;
}
return t1;
}


堆的方法详解见这个算法:
http://blog.csdn.net/linhuanmars/article/details/19899259?utm_source=tuicool
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: