leetcode刷题日志-146LRU缓存

在这里插入图片描述
思路:使用hashmap储存key,vaule,使用双向链表以快速查到尾结点(待逐出的节点),链表的题一定要在纸上画一下,不然连着连着就不知道连在哪里去了

class LRUCache {public class ListNode {int key;int value;ListNode next;ListNode pre;ListNode() {}ListNode(int key , int value) { this.key = key; this.value = value;}ListNode(int kye, int value, ListNode next) { this.key = key;this.value = value;this.next = next;}ListNode(int kye, int value, ListNode next,ListNode pre) { this.key = key;this.value = value;this.next = next;this.pre = pre;}}ListNode head;//头节点ListNode tail;//指向尾结点的前一个节点,方便逐出最久未使用关键字int capacity; //储存容量int cur_capacity;//储存当前容量Map<Integer,ListNode> map;//储存节点public LRUCache(int capacity) {this.head = new ListNode(0,0,null,null);this.capacity = capacity;this.cur_capacity = 0;this.map = new HashMap<>();this.tail = new ListNode(0,0,null,head);this.head.next = tail;}public int get(int key) {if(map.containsKey(key))  //最近使用到的key,将位置提前{if(map.get(key).next != null){map.get(key).next.pre = map.get(key).pre;map.get(key).pre.next = map.get(key).next;}map.get(key).next = head.next;map.get(key).next.pre = map.get(key);map.get(key).pre = head;head.next = map.get(key);return map.get(key).value;}elsereturn -1;}public void put(int key, int value) {if(map.containsKey(key)) //存在,将位置提前{map.get(key).value = value;if(map.get(key).next != null){map.get(key).next.pre = map.get(key).pre;map.get(key).pre.next = map.get(key).next;}map.get(key).next = head.next;map.get(key).next.pre = map.get(key);map.get(key).pre = head;head.next = map.get(key);}else{//不存在if(this.cur_capacity < this.capacity) //容量足够,直接添加到头{ListNode temp = new ListNode();temp.key = key;temp.value = value;temp.next = head.next;if(temp.next != null)temp.next.pre = temp;temp.pre = head;head.next = temp;cur_capacity++;map.put(key,temp);}else//容量不够,移出尾结点,添加新节点到头{ListNode tail_pre = tail.pre;map.remove(tail_pre.key);tail.pre.pre.next = tail;tail.pre.next = null;tail.pre = tail.pre.pre;tail_pre.pre = null;ListNode temp = new ListNode();temp.key = key;temp.value = value;temp.next = head.next;temp.next.pre = temp;temp.pre = head;head.next = temp;map.put(key,temp);}}}
}/*** Your LRUCache object will be instantiated and called as such:* LRUCache obj = new LRUCache(capacity);* int param_1 = obj.get(key);* obj.put(key,value);*/

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解剖指针篇(3)

个人主页&#xff08;找往期文章&#xff09; &#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 目录 二级指针 指针数组 指针数组模拟二维数组 字符指针变量 数组指针 数组指针初始化 二维数组传参的本质 函数指针 函数指针的使用 typedef关键字 函数指针数组 二级指针…

【IIC,存储器最强总结】

IIC&#xff0c;存储器总结 存储器介绍AT24C02介绍IIC介绍扩展 上拉&#xff0c;下拉&#xff0c;开漏 IIC时序结构 存储器介绍 存储器介绍&#xff1a; RAM易失性存储器/RAM&#xff1a;随机存取存储器&#xff08;英语&#xff1a;Random Access Memory&#xff0c;缩写&…

Linux服务详解

如有错误或有补充&#xff0c;以及任何改进的意见&#xff0c;请在评论区留下您的高见&#xff0c;同时文中给出大部分命令的示例&#xff0c;即是您暂时无法在Linux中查看&#xff0c;您也可以知道各种操作的功能以及输出 如果觉得本文写的不错&#xff0c;不妨点个赞&#x…

基于SSM的个性化旅游攻略定制系统设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的个性化旅游攻略定制系统设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xf…

2路DIN2路DO2路AIN远程4GRTU模块钡铼技术S270

钡铼技术的S270远程4G RTU模块是一款高性能的工业级远程终端单元&#xff0c;它支持2路数字输入(DIN)、2路数字输出(DO)以及2路模拟输入(AIN)&#xff0c;并通过4G网络实现数据的远程传输。这种模块的设计旨在满足各种工业自动化和监控需求&#xff0c;特别适用于那些位于偏远地…

电脑/机顶盒/ps3/4/连接老电视(只有AV、S-Video接口)解决方案之HDMI转AV/S-Video转换器HAV

HDMI转AV/S-Video转换器功能 01、将HDMI高清信号经过视频处理转换成AV、S-VIDEO(PAL/NTSC)的视频信号输出 02、将HDMI数字音频&#xff0c;经过DAC数模芯片处理转成模拟立体声输出 03、采用先进的视频处理技术&#xff0c;对图像的亮度&#xff0c;对比度及色彩进行增强处理 04…

Oracle篇—普通表迁移到分区表(第五篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

华为1.24秋招笔试题

华为1.24秋招笔试题 1.题目1 题目详情 - 2024.1.24-华为秋招笔试-第一题-计算积分 - CodeFun2000 1.1题解 import java.util.Scanner;class Main{public static void main(String[] args){Scanner scnew Scanner(System.in);String ssc.next();char[] chs.toCharArray();in…

Vue3.0(一):Vue的引入-options api-模板语法

Vue的引入方式 CDN方式进行引入 将以下 script标签引入即可 <script src"https://unpkg.com/vue3/dist/vue.global.js"></script><!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><met…

AI算力专题:算力存力及汽车电子领先布局,中国封测龙头长奔如电

今天分享的是AI算力系列深度研究报告&#xff1a;《AI算力专题&#xff1a;算力存力及汽车电子领先布局&#xff0c;中国封测龙头长奔如电》。 &#xff08;报告出品方&#xff1a;万联证券&#xff09; 报告共计&#xff1a;27页 全球战略布局完善&#xff0c;多元化、国际化…

TypeScript(十一) 类、对象

1. 类 1.1. 简介 TypeScript是面向对象的JavaScript。   类描述了所创建的对象共同的属性与方法。 1.2. 类的定义 class class_name { // 类作用域 }&#xff08;1&#xff09;定义类的关键字是class&#xff0c;后面紧跟类名&#xff0c;类可以包含以下几个模块&#xff…

数据结构+算法(第03篇):KO!大O——时间复杂度

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…