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类的问题,但是,对于内存有要求的情景下,该算法就面临较大的考验。
代码如下:
堆的方法详解见这个算法:
http://blog.csdn.net/linhuanmars/article/details/19899259?utm_source=tuicool
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
相关文章推荐
- LeetCode 28 StrStr 解法为KMP&&Rolling hash
- LeetCode 35 Search Insert Position 二分法处理
- 学知识的时候,把自己放得低一点
- LeetCode Gas Station
- 函数指针的正确理解 from C++ Primer Plus P242
- Linux下CPU获取指定时间的用户态、系统态以及空闲态的时间
- LeetCode 39 && 40 Combination Sum I && II 关键在于剪枝,剪枝讨论在末尾
- php调用R的脚本实现方案
- Leetcode 55 Jump Game && 45 Jump Game II
- LeetCode 26 Remove Duplicates from Sorted Array
- LeetCode Repeated DNA Sequences的一点疑惑
- Max Sum Plus Plus----DP
- How does memmove differ from memcpy
- LeetCode 8 String to Integer (atoi)
- LeetCode 2 Add Two Numbers
- LeetCode 16 3Sum Closest
- BuildYourOwnLisp Why we need enum
- LeetCode 14 Longest Common Prefix 0ms实现的算法
- Fighting
- LeetCode 21 Merge Two Sorted Lists