首页 > 其他 > 详细

leetcode_23_Merge k Sorted Lists

时间:2015-03-23 21:49:16      阅读:328      评论:0      收藏:0      [点我收藏+]

描述:

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

思路:

本来想模仿合并两个链表的方法,查找所有的lists链表一遍找出一个最小值,并将最小值链接到结果链表中,并将最小结点删除,将最小结点的next结点替代之,直至为null,将链表删去。
但是当lists.size()比较大时,时间复杂度就上来了,而且每次只能选一个最小结点,O(N*N)的节奏。。。
所以,想到不就是排序么,将所有的结点集合到一起,然后对其进行快速排序不就可以了么,啊哈,真的是这样,bravo!
很显然,这种方法肯定不是最优方法,但是时间复杂度也只是O(N*logN),也是可以接受的。

代码:

public class Solution implements Comparator<ListNode>{
	public int compare(ListNode t1,ListNode t2)
	{
		return t1.val-t2.val;
	}
	public ListNode mergeKLists(List<ListNode> lists) 
	{
		if(lists==null||lists.size()==0)
			 return null;
		 int len=0;
		 int i=0;
		 while(i<lists.size())//delete the duplicated linkedlist
		 {
			 if(lists.get(i)==null)
			 {
				 lists.remove(i);
				 i=0;
				 continue;
			 }
			 i++;
		 }
		 if(lists.size()==0)//has no node
			 return null;
		 else if(lists.size()==1)//just have one linkedlist
	    	 return lists.get(0);
		 List<ListNode>returnList=new ArrayList<ListNode>();
		 ListNode cur=null;
		 for(i=0;i<lists.size();i++)
		 {
			 cur=lists.get(i);
			 while(cur!=null)
			 {
				 returnList.add(cur);
				 cur=cur.next;
			 }
		 }
		 Collections.sort(returnList, new Solution());
		 ListNode pre=returnList.get(0);
		 cur=null; 
		 len=returnList.size();
		 for(i=1;i<len;i++)
		 {
			 cur=returnList.get(i);
			 pre.next=cur;
			 pre=cur;
		 }
		 returnList.get(len-1).next=null;
		 return returnList.get(0);
	}
}

结果:

技术分享

leetcode_23_Merge k Sorted Lists

原文:http://blog.csdn.net/mnmlist/article/details/44569177

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!