-
Notifications
You must be signed in to change notification settings - Fork 10
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
69 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
#!/usr/bin/env python | ||
# -*- coding: utf-8 -*- | ||
# vim: tabstop=4 shiftwidth=4 expandtab number | ||
""" | ||
TODO: module_docstring$ qianweishuo$ 2019/7/27 | ||
Authors: qianweishuo<qzy922@gmail.com> | ||
Date: 2019/7/27 下午8:13 | ||
""" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
#!/usr/bin/env python | ||
# -*- coding: utf-8 -*- | ||
# vim: tabstop=4 shiftwidth=4 expandtab number | ||
""" | ||
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。 | ||
获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。 | ||
写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。 | ||
进阶: | ||
你是否可以在 O(1) 时间复杂度内完成这两种操作? | ||
示例: | ||
LRUCache cache = new LRUCache( 2 /* 缓存容量 */ ); | ||
cache.put(1, 1); | ||
cache.put(2, 2); | ||
cache.get(1); // 返回 1 | ||
cache.put(3, 3); // 该操作会使得密钥 2 作废 | ||
cache.get(2); // 返回 -1 (未找到) | ||
cache.put(4, 4); // 该操作会使得密钥 1 作废 | ||
cache.get(1); // 返回 -1 (未找到) | ||
cache.get(3); // 返回 3 | ||
cache.get(4); // 返回 4 | ||
来源:力扣(LeetCode) | ||
链接:https://leetcode-cn.com/problems/lru-cache | ||
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 | ||
Authors: qianweishuo<qzy922@gmail.com> | ||
Date: 2019/7/27 下午8:13 | ||
""" | ||
from collections import OrderedDict | ||
|
||
|
||
class LRUCache(object): | ||
|
||
def __init__(self, capacity): | ||
self.capacity = capacity | ||
self.cache = OrderedDict() | ||
|
||
def get(self, key): | ||
if key in self.cache: | ||
# 刷新一下位置 | ||
v = self.cache.pop(key) | ||
self.cache[key] = v | ||
return v | ||
else: | ||
return -1 | ||
|
||
def put(self, key, value): | ||
# 注意判断,如果是新key而且已满,才需要抛出旧元素 | ||
if key in self.cache: | ||
self.cache.pop(key) | ||
elif len(self.cache) >= self.capacity: | ||
self.cache.popitem(last=False) | ||
self.cache[key] = value |