leetcode LRUCache
2014-03-06 10:26
232 查看
转载请注明来自souldak,微博:@evagle
接口就两个,get和set。
但是第一次写TLE,开始用的是单链表,单链表有个不好的地方是,容量满了之后,要删除最后一个元素会及其困难,必须从表头开始遍历。
为了不遍历,必须使用双向链表,然后记录链表结尾。
然后还有一个可以改进的地方是:get的时候,为了不从头开始扫描,用HashMap记录所有元素的引用。直接从Hashmap中取,O(1),然后再更新这个节点到链表头部,也是O(1).set 的时候,先从Hashmap中判断是否已经存在,存在的话修改值,然后移动到头部,如果不存在,新建节点,插入链表头部。也是O(1). 这样的话就不会超时了。
注意点: 如果移动的是最后一个元素的时候,要注意不要引用这个元素的next,它是空指针。
接口就两个,get和set。
但是第一次写TLE,开始用的是单链表,单链表有个不好的地方是,容量满了之后,要删除最后一个元素会及其困难,必须从表头开始遍历。
为了不遍历,必须使用双向链表,然后记录链表结尾。
然后还有一个可以改进的地方是:get的时候,为了不从头开始扫描,用HashMap记录所有元素的引用。直接从Hashmap中取,O(1),然后再更新这个节点到链表头部,也是O(1).set 的时候,先从Hashmap中判断是否已经存在,存在的话修改值,然后移动到头部,如果不存在,新建节点,插入链表头部。也是O(1). 这样的话就不会超时了。
注意点: 如果移动的是最后一个元素的时候,要注意不要引用这个元素的next,它是空指针。
相关文章推荐
- [C/C++]反转链表
- Linux内核链表实现过程
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- STL list链表的用法详细解析
- 编码实现从无序链表中移除重复项(C和JAVA实例)
- 结构之美:单链表的初始化、创建与遍历
- 结构之美:单链表的头结点与头指针
- 带头结点与不带头结点的单链表初始化
- 带头结点的单链表的12个基本操作
- 单链表的基础知识问与答
- 结构之美:使用头插法创建单链表
- 结构之美:单链表的销毁删除
- 怎样才算是掌握单链表呢?
- 结构之美:查找单链表指定位置结点的数据
- 结构之美:删除单链表指定位置的数据
- 结构之美:单链表逆序
- 结构之美:判断单链表中是否有环
- 结构之美:获取单链表倒数第N个结点值
- 腾讯面试题:快速找到未知长度单链表的中间节点