《leetcode》: LRU Cache
来源:互联网 发布:淘宝店铺代码生成 编辑:程序博客网 时间:2024/06/03 19:00
题目
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.
get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.
思路:超时
借用一个Map和List来完成,List得作用就是将每次操作的key放在最前面。这样,当满的时候,List的最后一个元素就是很久没有被使用过的,其对应的(key,value)应该在map中被删除。
但是这种方式不能AC,报超时,能优化的地方都进行了优化还是不行。
实现代码如下:
public class LRUCache { private Map<Integer,Integer> map = null; private List<Integer> list = new ArrayList<Integer>(); private int totalSize; public LRUCache(int capacity) { map = new HashMap<Integer,Integer>(capacity); totalSize = capacity; } public int get(int key) { if(map.containsKey(key)){ //将key放在最前面 //由于list的remove方法中的参数是索引下标 remove(key); list.add(0, key); return map.get(key); } return -1; } public void set(int key, int value) { int mapSize = map.size(); boolean b_Contain = map.containsKey(key); if(mapSize<totalSize&&!b_Contain){ map.put(key, value); } else if(mapSize<=totalSize&&b_Contain){ map.put(key, value); //把key放在最前面 remove(key); } else if(mapSize==totalSize&&!b_Contain){ Integer k = list.get(list.size()-1); //先在Map中删除最久没有使用的 map.remove(k, map.get(k)); map.put(key, value); //list.remove(k); remove(k); } //将key放在最前面 list.add(0, key); } private void remove(Integer k) { int len = list.size(); for(int i=0;i<len;i++){ if(k.equals(list.get(i))){ list.remove(i); break; } } }}
因此需要寻找更好的方法。
1 0
- LeetCode LRU 缓存 LRU Cache
- LRU Cache | leetcode
- Leetcode: LRU Cache
- LeetCode:LRU Cache
- Leetcode: LRU Cache
- [LeetCode] LRU Cache
- leetcode之LRU Cache
- [LeetCode]LRU Cache
- [LeetCode] LRU Cache
- leetcode LRU Cache
- LeetCode题解:LRU Cache
- LeetCode | LRU Cache
- Leetcode: LRU Cache
- [LeetCode] LRU Cache
- LeetCode OJ:LRU Cache
- Leetcode LRU Cache
- LeetCode - LRU Cache
- [Leetcode] LRU Cache (Java)
- html音频音量调节
- hdoj2089不要62(素数打表)
- Mysql cluster集群的搭建
- Fragment在inflate时的注意事项
- ZKW 线段树
- 《leetcode》: LRU Cache
- 浅谈C++多态性
- 【BZOJ】1087【SCOI2005】互不侵犯King
- maven Check $M2_HOME environment variable and mvn script match
- JAVA内存点滴
- 模拟按键给窗口发消息
- c++多个文件中如何共用一个全局变量
- 并查集
- hdu4728 PowMod(2016多校第一场1006)