合并k个已排序的链表 分类: leetcode 算法 2015-07-09 17:43 3人阅读 评论(0) 收藏
最先想到的是把两个linked lists 合并成一个。
这样从第一个开始一个一个吞并,直到所有list都被合并。
class ListNode:# Definition for singly-linked list.
def __init__(self, x):
self.val = x
self.next = None
class Solution:
# @param {ListNode[]} lists
# @return {ListNode}
def mergeKLists_0(self, lists): #方法1
lists = [list for list in lists if list is not None]
if len(lists)<=0:
return lists
l=lists[0]
for i in range(1,len(lists)):
l=self.merge2lists(l,lists[i])
return l
def merge2lists(self,list_1,list_2):
# merge 2 linked list
if list_1 is None:
return list_2
if list_2 is None:
return list_1
if list_1.val>=list_2.val:
head_1=list_1 #big
head=head_2=list_2 #small
else:
head_1=list_2 #big
head=head_2=list_1 #small
while head_2.next!=None:
if head_2.next.val>head_1.val:
head_2.next,head_1=head_1,head_2.next
head_2=head_2.next
if head_1!=next:
head_2.next=head_1
return head
但是,所花费的时间代价太长,不通过。
方法2, 分治 递归, 借助于mergesort的思想。
def mergeKLists(self, lists):
lists = [list for list in lists if list is not None]
if len(lists)<=0:
return lists
if len(lists)==1:
return lists[0]
d=[]
for i in range(0,len(lists)-1,2):
l=self.merge2lists(lists[i],lists[i+1])
d.append(l)
if len(lists)%2==1:
d.append(lists[len(lists)-1])
return self.mergeKLists(d)
通过。
merge2lists(n,m)平均需要比较(m+n)/2 即O(n+m);
假设k个已排序了的链表,每个链表的长度为n;
“方法1”,完成所有的合并的时间复杂度为O(nk2)=O((n+n)+(2n+n)+...+((k−1)n+n))=O((k−1)∗kn/2+(k−1)n)
“方法2”,每次递归的时候总共需要比较O(nk)次,一共log(k)次递归,所以算法复杂度为O(nklog(k))
版权声明:本文为博主原创文章,未经博主允许不得转载。
合并k个已排序的链表 分类: leetcode 算法 2015-07-09 17:43 3人阅读 评论(0) 收藏的更多相关文章
- 选择排序 分类: 算法 c/c++ 2014-10-10 20:32 509人阅读 评论(0) 收藏
选择排序(假设递增排序) 每次选取从当前结点到末尾结点中最小的一个与当前结点交换,每一轮固定一个元素位置. 时间复杂度O(n^2),空间复杂度O(1).下面的示例代码以带头结点的链表为存储结构: #i ...
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
//OC: Objective-C, 面向对象的C语言 //OC与C的区别 //1.OC是C的超集, C语言的所有语法都可以在OC中使用 //2.OC是面向对象 //3.OC是一门运行时语言 //4. ...
- Shuffle'm Up 分类: 函数 POJ 查找 2015-08-09 17:01 6人阅读 评论(0) 收藏
Shuffle'm Up Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7529 Accepted: 3466 Descript ...
- 共享内存+互斥量实现linux进程间通信 分类: Linux C/C++ 2015-03-26 17:14 67人阅读 评论(0) 收藏
一.共享内存简介 共享内存是进程间通信中高效方便的方式之一.共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针,两个进程可以对一块共享 ...
- OC基础:属性.点语法.KVC 分类: ios学习 OC 2015-06-24 17:24 61人阅读 评论(0) 收藏
属性:快速生成setter和getter 属性也包括:声明和实现 1.属性的声明写在.h中 格式:@property 数据类型 变量名; 如果实例变量一致的时候,属性的声明可以合并,每一个属性之间使用 ...
- 利用OpenMP实现埃拉托斯特尼(Eratosthenes)素数筛法并行化 分类: 算法与数据结构 2015-05-09 12:24 157人阅读 评论(0) 收藏
1.算法简介 1.1筛法起源 筛法是一种简单检定素数的算法.据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274-194年)发明的,又称埃拉托斯特尼筛法(sieve of Eratos ...
- refresh的停车场 分类: 栈和队列 2015-06-18 17:13 26人阅读 评论(0) 收藏
refresh的停车场 TimeLimit: 1000ms Memory limit: 65536K 题目描述 refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是 ...
- 写在新建博客的第一天 分类: fool_tree的笔记本 2014-11-08 17:57 144人阅读 评论(0) 收藏
来CSDN开博客的目的有两个: 其一是因为CSDN的代码输出,看过一些博文,觉得这里的代码输出真的很漂亮: 其二则是因为,感觉自己印象笔记用久了之后,渐渐地几乎不再自己写些东西了,习惯了方便的剪藏插件 ...
- 转自知乎,亲民好酒推荐 分类: fool_tree的笔记本 2014-11-08 17:37 652人阅读 评论(0) 收藏
这里尽量为大家推荐一些符合大众喜好.业内公认好评."即使你不喜欢,你也会承认它不错"的酒款.而且介绍到的酒款还会有一个共同的特征,就是能让你方便的在网上买到. 大概会分为烈酒,利口 ...
随机推荐
- android 中文 api (71) —— BluetoothServerSocket[蓝牙]
前言 本章内容是 android.bluetooth.BluetoothServerSocket,为Android蓝牙部分的章节翻译.服务器通讯套接字,与TCP ServerSocket类似.版本为 ...
- bulk insert data into database with table type .net
1. Create Table type in Sqlserver2008. CREATE TYPE dbo.WordTable as table ( [WordText] [nchar]() NUL ...
- C++之类的静态变量
成员变量 通过对象名能够访问public成员变量 每个对象都可以有只属于自己的成员变量 成员变量不能在对象之间共享 类的静态成员 静态成员变量 存储在 全局数据区 #include<std ...
- 【Linux命令】杀死僵尸程序
A zombie is already dead, so you cannot kill it. To clean up a zombie, it must be waited on by its p ...
- 在SAE上搭建自定义版本WordPress, 并用SAE Storage代替WordPress Uploads
问题由来: 1. SAE中默认的WP for SAE版本太低, 导致某些基于新版本WordPress的插件不能使用. 2. SAE中单个APP的代码空间仅有100M. 将WordPress中uploa ...
- javascript 简易文本编辑器
转载请注明出处:http://www.cnblogs.com/enzozo/p/4357031.html 写在前面: 本文本编辑器具备功能:选择字体大小.颜色.加粗.斜体.下划线.点击 'Submit ...
- webviewactivity
WebView注意点,注释里有说明 package com.example.suneyaenews; import com.example.http.HttpThread; import androi ...
- 解决phpmyadmin配置文件的权限问题
如果部署的phpmyadmin权限为所有人可写,即权限为777,就会报”Wrong permissions on configuration file, should not be world wri ...
- 依赖和用jar包得区别
有个项目,需要用到第三方开发的一个jar文件,我先是把生成的jar文件直接拷贝到我的项目的libs目录下,项目自动加载了引用的jar包,在java文件中使用也没有问题,但是由于引用的jar文件中有自定 ...
- spring mvc 分页
spring mvc 分页