《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