【模拟-BM100 设计LRU缓存结构】

2024-06-09 11:44

本文主要是介绍【模拟-BM100 设计LRU缓存结构】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

BM100 设计LRU缓存结构

描述
设计LRU(最近最少使用)缓存结构,该结构在构造时确定大小,假设大小为 capacity ,操作次数是 n ,并有如下功能:

  1. Solution(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存
  2. get(key):如果关键字 key 存在于缓存中,则返回key对应的value值,否则返回 -1 。
  3. set(key, value):将记录(key, value)插入该结构,如果关键字 key 已经存在,则变更其数据值 value,如果不存在,则向缓存中插入该组 key-value ,如果key-value的数量超过capacity,弹出最久未使用的key-value

提示:
1.某个key的set或get操作一旦发生,则认为这个key的记录成了最常使用的,然后都会刷新缓存。
2.当缓存的大小超过capacity时,移除最不经常使用的记录。
3.返回的value都以字符串形式表达,如果是set,则会输出"null"来表示(不需要用户返回,系统会自动输出),方便观察
4.函数set和get必须以O(1)的方式运行
5.为了方便区分缓存里key与value,下面说明的缓存里key用""号包裹

在这里插入图片描述

在这里插入图片描述

分析

python 的话,直接用collection 中的 OrderedDict

OrderedDict 是 Python 标准库 collections 模块中的一个特殊字典类,其核心特性是维护了元素添加的顺序。这与 Python 3.7 及以上版本中的普通字典不同,尽管普通字典现在也保持插入顺序,但 OrderedDict 提供了一些额外的功能,这些功能在普通字典中不可用。

顺序性:
OrderedDict 记录了元素被添加到字典中的顺序。这对于需要元素顺序的场景(如实现LRU缓存)非常有用。

重排功能:
使用 move_to_end 方法可以将一个键值对移动到有序字典的末尾或开头,这在调整元素顺序时非常方便。

常用方法
popitem(last=True): 弹出并返回一个键值对。如果 last 为 True(默认值),则按 LIFO(后进先出)顺序返回最后一个添加的元素;如果为 False,则按 FIFO(先进先出)顺序返回第一个添加的元素。
move_to_end(key, last=True): 将存在的键 key 移动到字典的末尾(如果 last=True)或字典的开头(如果 last=False)。
示例代码
下面是一个简单的示例,展示了 OrderedDict 的一些基本用法:

from collections import OrderedDict# 创建有序字典
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3# 访问顺序
for key, value in od.items():print(key, value)  # a 1, b 2, c 3# 移动元素 'b' 到末尾
od.move_to_end('b')
for key, value in od.items():print(key, value)  # a 1, c 3, b 2# 弹出最先加入的元素
od.popitem(last=False)
for key, value in od.items():print(key, value)  # c 3, b 2

代码

from collections import OrderedDictclass Solution:def __init__(self, capacity: int):# write code hereself.capacity = capacityself.lru_cache = OrderedDict()def get(self, key: int) -> int:# write code hereif key in self.lru_cache:self.lru_cache.move_to_end(key)return self.lru_cache.get(key,-1)def set(self, key: int, value: int) -> None:# write code hereif key in self.lru_cache:# self.lur_cache.move_to_end(key)del self.lru_cache[key]self.lru_cache[key] = valueif len(self.lru_cache)>self.capacity:self.lru_cache.popitem(last=False)# Your Solution object will be instantiated and called as such:
# solution = Solution(capacity)
# output = solution.get(key)
# solution.set(key,value)

这篇关于【模拟-BM100 设计LRU缓存结构】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045081

相关文章

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Java实现本地缓存的常用方案介绍

《Java实现本地缓存的常用方案介绍》本地缓存的代表技术主要有HashMap,GuavaCache,Caffeine和Encahche,这篇文章主要来和大家聊聊java利用这些技术分别实现本地缓存的方... 目录本地缓存实现方式HashMapConcurrentHashMapGuava CacheCaffe