随笔分类 -  算法题

摘要:先从一道面试题开始: 给A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。 这个问题的本质在于判断一个元素是否在一个集合中。哈希表以O(1)的时间复杂度来查询元素,但付出了空间的代价。在这个大数据问题中,就算哈希表有100%的空间利用率,也 阅读全文
posted @ 2019-08-03 17:11 再见紫罗兰 阅读(2244) 评论(0) 推荐(0) 编辑
摘要:质数(prime number)又称素数,除了1和它本身外,不能整除以其他自然数,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。最小的质数是2。要判断一个整数N是不是质数很简单,看它是否能被2到sqrt(N)之间的整数整除即可。def isPrime(n): if n%2=... 阅读全文
posted @ 2014-12-19 19:54 再见紫罗兰 阅读(770) 评论(0) 推荐(0) 编辑
摘要:要求计算二进制(16位)的逆序,如数12345用二进制表示为: 00110000 00111001将它逆序,我们得到了一个新的二进制数: 10011100 00001100最容易想到的方法就是依次交换两端的数据,从右向左遍历数字,当i位遇到1时,将逆序数字对应的(17-i)位设为1。def r... 阅读全文
posted @ 2014-08-16 10:42 再见紫罗兰 阅读(2755) 评论(0) 推荐(0) 编辑
摘要:1.简单递归最简单的求幂算法是根据xn=x*xn-1,使用递归:def foo(x,n): if n==0: return 1 else: return x*foo(x,n-1)这样求x的n次方,会进行n-1次乘法运算,n较大时效率很低。2.高效递归一种更高效... 阅读全文
posted @ 2014-08-15 02:44 再见紫罗兰 阅读(1329) 评论(0) 推荐(0) 编辑
摘要:无聊统计了下列表去重到底有多少种方法。1.集合list(set(alist))如果要保持顺序:import randomif __name__=='__main__': a=[random.randint(0,10) for i in xrange(10)] b=list(set(a))... 阅读全文
posted @ 2014-08-14 13:22 再见紫罗兰 阅读(3977) 评论(2) 推荐(0) 编辑
摘要:设计包含min函数的栈。定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。栈中元素设两个域,一个记录元素的值,一个记录栈的最小值。class Stack(object): def __init__(self): ... 阅读全文
posted @ 2014-06-17 22:50 再见紫罗兰 阅读(720) 评论(0) 推荐(0) 编辑
摘要:题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。一道微软的面试题。二叉查找树的每个节点都有两个指针,双向链表的节点也... 阅读全文
posted @ 2014-05-27 02:56 再见紫罗兰 阅读(1062) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示