前言
话先说在前头,牛客网对 Python 的支持太差了,这个代码是 超时 的。
排行榜和讨论区上都是拆输入的字符,虽然为了 AC 是无可厚非,但我觉得至少应该有个正经解以供后人参考(虽然这个过不了)。
代码
重点是 collections.OrderedDict(),可以点击 Python官方文档 学习
另外理解方面最重要的一点是,有序字典 末尾是最新 的键值对。
#
# lru design
# @param operators int整型二维数组 the ops
# @param k int整型 the k
# @return int整型一维数组
#
import collections
class Solution:
def LRU(self , operators , k ):
self.k, self.lru = k, collections.OrderedDict()
res = []
for x in operators:
if x[0] == 1:
self._set(x[1], x[2])
elif x[0] == 2:
res.append(self.get(x[1]))
return res
def _set(self, key, value):
key = str(key)
if key in self.lru: # 已有的键值对就移到最后
self.lru.move_to_end(key)
else:
if len(self.lru) >= self.k: # 大于等于容量就要删最老的
self.lru.popitem(last=False) # 方法中参量 last,False 代表 FIFO
self.lru[key] = value
def get(self, key):
key = str(key)
if key not in self.lru:
return -1
else:
self.lru.move_to_end(key)
return self.lru[key] 
京公网安备 11010502036488号