算法分析课每周练习 LRU Cache

来源:互联网 发布:复杂网络可视化软件 编辑:程序博客网 时间:2024/06/08 15:09

题目

LRU Cache


Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and put


分析

    LRU Cache很常用的东西,一般需要支持插入和查询两种操作,而且查询性能要好。


class LRUCache(object):    def __init__(self, capacity = 5):        """        :type capacity: int        """        self.capacity = capacity        self.cache = dict()        self.key = []     def get(self, key):        """        :type key: int        :rtype: int        """        if self.cache.has_key(key):            self.key.remove(key)            self.key.insert(0,key)            return self.cache[key]        else:            return None     def put(self, key, value):        """        :type key: int        :type value: int        :rtype: void        """        if self.cache.has_key(key):            self.cache.pop(key)            self.cache[key] = value            self.key.remove(key)            self.key.insert(0,key)        elif len(self.cache) == self.capacity:            old_key = self.key.pop()            self.cache.pop(old_key)            self.key.insert(0,key)            self.cache[key] = value        else:            self.cache[key] = value            self.key.insert(0,key)

代码使用了一个queue来管理cache的进出,remove操作是O(n)级别的,如果通过对dict的扩张,使用双向队列管理的话,时间复杂度可以下降到O(1)



原创粉丝点击