【LeetCode】146. LRU缓存

ops/2024/9/23 8:28:58/

1.leetcode.cn/problems/lru-cache/description/?envType=study-plan-v2&envId=top-interview-150" rel="nofollow">题目

在这里插入图片描述

2.思想

3.代码

3.1 代码1

下面这是一版错误的代码。错误的原因在于逻辑不正确导致最后的代码也是不正确的。

class LRUCache:def __init__(self, capacity: int):self.time = 0 # 用于全局记录访问的时间self.num2time = {} # 数字到时间的映射self.key2val = {} # 数字到数字self.capacity = capacityself.history = [] # 用于记录操作的历史# get 也要对时间进行修改def get(self, key: int) -> int:         if self.key2val.get(key,-1) != -1:self.time += 1self.num2time[key] = self.time # 更新时间成最新的self.history.append(key)return self.key2val.get(key,-1)def put(self, key: int, value: int) -> None:self.time += 1 # 时间戳加1self.history.append(key)        # 如果目前还没有装满,那么直接放if(len(self.key2val) < self.capacity):self.key2val[key] = valueelif(self.key2val.get(key,-1)!=-1):self.key2val[key] = value # 直接更新self.num2time[key] = self.timeself.history.append(key)else: # 考虑去掉某个数            curTime = self.time# 获取左侧的时间while(self.num2time.get(self.history[0],-1)==-1):del self.history[0] # 删除 第0位 元素leftTime = self.num2time[self.history[0]]while(curTime - leftTime < self.capacity):del self.history[0] # 删除 第0位 元素while(self.num2time.get(self.history[0],-1)==-1):del self.history[0] # 删除 第0位 元素leftTime = self.num2time[self.history[0]] invalid_key = self.history[0]# print("invalid_key = ",invalid_key)# print("key2val = ",self.key2val)# print("history = ", self.history)del self.key2val[invalid_key]del self.history[0]del self.num2time[invalid_key]self.key2val[key] = valueself.num2time[key] = self.time# print("num2time = ", self.num2time)# Your LRUCache object will be instantiated and called as such:
# obj = LRUCache(capacity)
# param_1 = obj.get(key)
# obj.put(key,value)

错误的逻辑主要在下面这个地方:
在这里插入图片描述
这里的while是想用于找出该删除哪个数,但是这个逻辑并非正确
这里的curTime表示当前的时间,leftTime表示访问栈中最左侧节点的时间。二者的距离与capacity进行比较:

  • 如果距离大于等于capacity,那么就表明需要把这个数删除
    这样依次判断,找出需要退出的那个数即可。

http://www.ppmy.cn/ops/114674.html

相关文章

[OpenCV] 数字图像处理 C++ 学习——16直方图均衡化、直方图比较 详细讲解+附完整代码

文章目录 前言1.直方图均衡化的理论基础(1)什么是直方图(2)直方图均衡化原理(3)直方图均衡化公式 2.直方图比较理论基础(1)相关性 (Correlation)——HISTCMP_CORREL(2)卡方 (Chi-Square)——HISTCMP_CHISQR(3)十字交叉性 (Intersection) ——HISTCMP_INTERSECT(4)巴氏距离 (Bha…

深入浅出:Eclipse 中配置 Maven 与 Spark 应用开发全指南

Spark 安装配置 1.在 Eclipse 中配置 Maven Eclipse 中默认自带 Maven 插件&#xff0c;但是自带的 Maven 插件不能修改本地仓库&#xff0c;所 以通常我们不使用自带的 Maven &#xff0c;而是使用自己安装的&#xff0c;在 Eclipse 中配置 Maven 的 步骤如下&#xff1a;…

软件测试技术之 GPU 单元测试是什么!

1 背景 测试是开发的一个非常重要的方面&#xff0c;可以在很大程度上决定一个应用程序的命运。良好的测试可以在早期捕获导致应用程序崩溃的问题&#xff0c;但较差的测试往往总是导致故障和停机。 单元测试用于测试各个代码组件&#xff0c;并确保代码按照预期的方式工作。单…

机器学习查漏补缺(3)

[E] Why does an ML model’s performance degrade in production? There are several reasons why a machine learning models performance might degrade in production: Data drift: The distribution of the input data changes over time (e.g., customer behavior, ma…

SQL 语法学习指南

目录 SQL 语法学习指南1. SQL 基本概念1.1 什么是 SQL&#xff1f;1.2 常见的数据库管理系统&#xff08;DBMS&#xff09; 2. SQL 基础语法2.1 SELECT 查询2.2 插入数据&#xff1a;INSERT INTO2.3 更新数据&#xff1a;UPDATE2.4 删除数据&#xff1a;DELETE 3. SQL 进阶语法…

Pandas 数据分析入门详解

今日内容大纲介绍 DataFrame读写文件 DataFrame加载部分数据 DataFrame分组聚合计算 DataFrame常用排序方式 1.DataFrame-保存数据到文件 格式 df对象.to_数据格式(路径) ​ # 例如: df.to_csv(data/abc.csv) 代码演示 如要保存的对象是计算的中间结果&#xff0c;或者以…

【高等代数笔记】线性空间(五-九)

3. 线性空间 主线任务&#xff1a;研究线性空间和它的子空间的结构 研究平面 π \pi π上向量共线与不共线的问题&#xff1a; c ⃗ \vec{c} c 与 a ⃗ ≠ 0 \vec{a}\ne\boldsymbol{0} a 0共线 c ⃗ λ a ⃗ ⇔ λ ∈ R ⇔ − λ a ⃗ 1 c ⃗ 0 ⃗ \vec{c}\lambda\vec{…

uniapp map设置高度为100%后,会拉伸父容器的高度

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…