LRU 算法,但 get 和 put 必须 O(1),用哈希表

news2024/11/22 11:07:01

https://leetcode.cn/problems/lru-cache/

题目有key、value的,直接就上map了
结果:😅
在这里插入图片描述
仔细一看,原来要 get 和 put 必须 O(1)

只能抛弃树型数据结构了

线性的数据结构也可以吧,如果可以构造出一个队列,从前往后放入;如果访问,把访问的那个拿出来放后面;如果满了,把最前面的那个踢出去;如果更新,把更新的那个放最后面

  1. 从前往后放入:queue
  2. 如果访问,把访问的那个拿出来放后面:放后面queue能实现,但是找到那个访问的,暴力O(n),如果是用map就是O(logn),没到O(1)
  3. 如果满了,把最前面的那个踢出去:queue
  4. 如果更新,把更新的那个放最后面:跟2一样,问题在找不着

能在O(1)找到元素的数据结构是哈希表
哈希表是unordered_map

我自己写这题的时候负优化,想着可以在队列中存一些脏数据,等到用到的时候再判断这个数据脏不脏。但其实,这个判断也是要时间的,不如直接维护真实数据


看到题解有人用list,list的话是链式结构,插入O(1),删除O(1),查询O(n),刚开始我想,删除不用找到对应的那个么?这样又O(n)了?其实是不用的,如果是自己实现的话

    void removeNode(DLinkedNode* node) {
        node->prev->next = node->next;
        node->next->prev = node->prev;
    }

这个node是一个指针,这个指针是unordered_map给的,而不是迭代list找到的,那就O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/766781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ 容器 ] Docker 基本管理

目录 一、Docker 概述1.1 Docker 是什么?1.2 Docker 的宗旨1.3 容器的优点1.4 Docker 与 虚拟机的区别1.5 容器在内核中支持的两种技术namespace的六大类型 二、Docker核心概念2.1 镜像2.2 容器2.3 仓库 总结 一、Docker 概述 1.1 Docker 是什么? 是一…

OpenCV for Python 学习第三天 :图片处理之NumPy库与OpenCV相结合

上一篇博客我们了解了图像在OpenCV中的保存方式。并且我们自己上手创建了一张灰度图像和一张彩色图像。除此之外,我们还了解到了彩色图像通道在OpenCV中和我们日常所了解的不一样,是通过BGR的顺序进行编码的。咱们一定要记清楚哦~ 那么今天,我…

STL好难(8):map和set

目录 1.一些概念的理解 🍉关联式容器和序列式容器 🍉key模型、key/value模型 🍉树形结构关联式容器 2.set的介绍 🍉set文档 🍉set的使用 🍒set的模板参数列表 🍒set的构造 &#x1f3…

【TiDB理论知识 05】TiKV-Raft协议

目录 一 概念 二 raft共识算法对于TiKV的几个重要功能 1 Raft日志复制 1 Raft日志复制流程 2 名词解释 分层次理解TIKV 2 Raft Leader选举 集群初始状态时Leader选举流程 数据正在复制时Leader选举流程 初始化时的特殊情况 raft 参数与Tidb 参数对应关系 一 概念 le…

SpringCloud系列(十六)[分布式搜索引擎篇] - DSL 查询及相关性算分的学习 (部分)

在SpringCloud系列(十五)[分布式搜索引擎篇] - 结合实际应用场景学习并使用 RestClient 客户端 API这篇文章中我们已经对 RestClient 有了初步的了解, 并且已经将一些数据进行了存储, 但是这并不是我们学习 ElasticSearch 的目的, ElasticSearch 最擅长的…

Java8之Stream流

目录 简介 特点 Stream操作步骤 创建 中间操作 筛选与切片 filter(Predicate p) distinct() limit(long maxSize) skip(long n) 映射 map(Function f) flatMap(Function f) 排序 自然排序 定制排序 终止操作 匹配与查找 归约 收集 好处 不足 简介 在编写…

css基本样式的使用

1、高度和宽度 .c1{height: 300px;width: 500px; }注意事项: 宽度,支持百分比行内标签,默认无效块级标签,默认有效(即使右侧空白,也不给你占用) 块级和行内标签 css样式 标签: di…

echarts 地图点击常见问题

echats 散点图不支持缩放 echarts 地图点击激活label如何去除 高德loca 1.4版本热力图报错 绘制的颜色区间是 0 --1 高德地图销毁不生效 自己傻逼,每次没有清空数组导致叠加数据,约点数据越多。 为何用高德地图district.search查询不到别的省数据&…

【SpringBoot】SpringBoot的创建和运行

1.什么是SpringBoot? Spring 的诞⽣是为了简化 Java 程序的开发的,⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发 的。 Spring Boot是由Pivotal团队提供的基于Spring的框架,该框架使用了特定的方式来进行配置,从而使开发…

洗鞋小程序开发

上门洗鞋小程序为用户提供了便捷、高效的鞋子洗护服务。通过手机即可预约上门取送鞋子,省时省力,让鞋子焕然一新。下面我们来看看这个小程序的具体功能介绍。 1. 预约取送服务:用户可以在上门洗鞋小程序中选择合适的时间和地点,预…

访问学者面试申请如何应对?

作为一个学者面试申请者,面对这一重要机会,我们需要认真准备并采取适当的应对策略。下面知识人网小编将提供一些建议,帮助你在面试中取得良好的表现。 首先,在准备阶段,你应该研究并了解申请机构的背景和研究方向。了解…

阻止冒泡 大盒子套小盒子 点击大盒子跳转页面 小盒子不跳转

比如论坛点赞功能 点击这篇帖子跳到论坛详情页面,但是点赞不跳转 <view click.stop"onSmallBoxClick"><!-- 点赞 --> </view>methods: {onSmallBoxClick() {// 点赞逻辑 } } 大盒子 帖子div <view click"g…

pdf合并一页怎么合并?这几种合并方法看看

pdf合并一页怎么合并&#xff1f;PDF文件是一种非常常见的文件格式&#xff0c;它可以在不同的操作系统和设备之间方便地进行共享。有时候&#xff0c;我们需要将多个PDF文件合并成一个文件。例如&#xff0c;当我们需要将多个文档合并成一个大文档时&#xff0c;或者我们需要将…

Redis数据类型与常用命令

文章目录 前言一、Redis数据类型1. Redis数据类型简介2. Redis数据类型特点 二、Redis常用命令1. 字符串string 操作命令2. 哈希hash 操作命令3. 列表list 操作命令4. 集合set操作命令5. 有序集合 sorted set 操作命令6. 通用命令 总结 前言 为了巩固所学的知识&#xff0c;作…

TRT3-trt-basic - 6 Int8的量化

int8量化是利用int8乘法替换float32乘法实现性能加速的一种方法 对于常规模型有&#xff1a;y kx b&#xff0c;此时x、k、b都是float32, 对于kx的计算使用float32的乘法 对于int8模型有&#xff1a;y tofp32(toint8(k) * toint8(x)) b&#xff0c;其中int8 * int8结果为in…

win7,win10下删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\报错

在调试虚拟网卡驱动时&#xff0c;由于修改错误&#xff0c;导致枚举顺序错乱&#xff0c;因此通过删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\WINTUN下的所有项&#xff0c;即可&#xff0c;win10可用。 1、下载PStools&#xff1a; http://technet.microsoft.c…

130、仿真-基于51单片机智能窗户温湿度电机控制仿真设计(Proteus仿真+程序+配套资料等)

方案选择 单片机的选择 方案一&#xff1a;STM32系列单片机控制&#xff0c;该型号单片机为LQFP44封装&#xff0c;内部资源足够用于本次设计。STM32F103系列芯片最高工作频率可达72MHZ&#xff0c;在存储器的01等等待周期仿真时可达到1.25Mip/MHZ(Dhrystone2.1)。内部128k字节…

算法(1):斐波那契数列模型

目录 &#x1f981;三步问题 &#x1f349;题目解析 &#x1f349;算法原理 &#x1f352;状态表示 &#x1f352;状态转移方程 &#x1f352;初始化 &#x1f352;填表顺序、返回值 &#x1f349;代码编写 &#x1f981;使用最小花费爬楼梯 &#x1f349;题目解析 …

为什么选择STM32才是明智之选?

在电子工程领域&#xff0c;我们强调适用性&#xff0c;性能并非最重要&#xff0c;甚至不是首要考虑因素。选择合适的微控制器&#xff08;MCU&#xff09;根据设计需求而异&#xff0c;常规做法是在保证功能满足的前提下&#xff0c;选择稳定可靠且经济实惠的器件。而对于那些…

前端转换bigInt,axios拦截器失效

前端转换bigInt&#xff0c;axios拦截器失效 关于bigInt的使用切换雪花ID解决精度丢失问题进度丢失&#xff0c;前端不支持bigInt解决问题 拦截器失效验证及解决 关于bigInt的使用 这篇文章算是使用中的小笔记吧&#xff0c;主要是我自己搜索没找到直接的方法&#x1f613;&am…