
读书笔记+算法
文章平均质量分 82
secretx
这个作者很懒,什么都没留下…
展开
-
手写LRU
手写LRU1.要求put / get 均是 O(1) 时间复杂度 超出容量自动删除最老数据2.用什么数据结构?任意查找要求 O(1),必然有哈希 时间需要有序,必然链表或者数组 由于删除需求,也要控制在O(1),数组淘汰 由于单链表删除节点,需要寻找前驱,并非 O(1),所以单链表淘汰 所以结论,哈希(key-->node) + 双链表,哈希存key维持映射关系,双链表维持时序以及val 3.进一步,链表的Node定义是? 初版 class Node(o原创 2020-06-30 17:06:15 · 344 阅读 · 0 评论 -
一些智力题解析
在不考虑极端情况,比如割不断,绳子过短没法割等等情景下:一根绳子两端拉直,割一刀只能成两段,仅一种情况。如果割两刀,则可以成三或者四段,有两种情况。现在问:一根绳子允许你割10刀,有多少种情况?最少:每次割一刀,只增加一段,就是不要把几段摆在一起一刀同时割,那么割N次,最少产生N+1段最多:每次都把前面的绳子摆在一起,一刀全部隔断,段数成倍增长,那么割N次,最多产生2的N次方段从N+1原创 2015-12-28 17:30:49 · 1663 阅读 · 0 评论 -
编程珠玑笔记1
一个文件里有1千万(10000000)个7位的整数(小于1千万),给大约1M内存让排序位图(bitmap),长度10000000的bit数组a初始化为0,当数字x出现,a[x]=1,然后依次输出标志位为1的下标号。10000000bit == 1250000byte == 1220K == 1.19M。如果严格1M做成双通道程序,第一次标记前500万输出,第二次标记后500万输原创 2015-10-27 15:29:21 · 924 阅读 · 0 评论 -
编程珠玑笔记2
1.稳定二分查找(首次出现的目标)一般二分查找,如果目标多次出现,不能保证找到第一次出现的。当然你也可以找到目标后,不停往前试探,从而找到第一次出现的目标。下面的更优雅(high单侧二分移动)def binary_search_first(array, target):low, high = -1, len(array)while low + 1 != high: # 避免l原创 2016-06-28 15:34:29 · 526 阅读 · 0 评论 -
C语言内存思考题
C语言内存思考题去企鹅面Python后台职位,悲剧的是一面笔试题除了一个正则,全部算法题,还要求得用C写。小白我4+年没有碰C了,知识早还给老师了,死了一地脑细胞。有个题随便蒙的,记录一下看代码说出Test函数运行结果.void GetMemory(char *p){ p=(char*)malloc(100);}void Test(void){ char *s转载 2016-06-30 15:13:14 · 626 阅读 · 0 评论 -
垃圾回收算法概要
标记-清除法问世最早的GC算法,分为标记和清除2个阶段.标记 从根对象开始递归标记所有能访问到的对象,这些对象就是活动的. 递归过程可能是DFS或BFS清除 从堆首地址开始,遍历每个对象的标志位,如果不是活动的,就回收对象,具体表现是链接到空闲链表.下一次再分配时,直接从空闲链表里取. 清除阶段,堆越大,耗时越长,最大暂停时间就越大.有延迟清除法可以缓解最大暂停时间问题,每次只清除上一次原创 2018-01-07 15:44:25 · 426 阅读 · 0 评论