当前位置: 首页> 汽车> 行情 > 手机qq网页版网站_设计接单平台app排行榜_佛山网页搜索排名提升_十大互联网广告公司

手机qq网页版网站_设计接单平台app排行榜_佛山网页搜索排名提升_十大互联网广告公司

时间:2025/7/10 1:05:28来源:https://blog.csdn.net/m0_74329692/article/details/146554981 浏览次数: 0次
手机qq网页版网站_设计接单平台app排行榜_佛山网页搜索排名提升_十大互联网广告公司

146. LRU 缓存 - 力扣(LeetCode)

这道题采用双向链表加哈希表;

哈希表是为了随机访问,双向链表是为了能够确定位置

这里面注意的是我们需要一个哨兵节点来辅助,需要让哨兵节点的prev.next以及next.next指向自己,即这里是一个双向循环链表,并且我们每次头插节点的时候都是头插在哨兵节点之后

class LRUCache {//这里put和get想实现O1那么就需要使用哈希表,但是哈希表是没有位置观念的//比如我们想删除最久插入的元素,那么只能一个个遍历,而有位置观念的就是数组和链表了//但是我们每次插入元素的时候都要放到最前面也就是头插,如果用数组的话,那么元素需要//整体移动,所以采用双向链表static class Node{int key;int val;Node prev;Node next;Node(int k ,int v){key = k;val = v;}}private int capacity;private Map<Integer,Node> map = new HashMap<>();//设置一个哨兵节点private Node head  = new Node(0,0);//构造初始化public LRUCache(int capacity) {this.capacity = capacity;head.next = head;head.prev = head;}public int get(int key) {//获取最新节点的值Node node = getNode(key);return node == null ? -1 : node.val;}public void put(int key, int value) {Node node = getNode(key);if(node != null){map.put(key,node);node.val = value;return;} //不存在插入Node newNode = new Node(key,value);addLeft(newNode);map.put(key,newNode);if(map.size() > capacity) {Node last = head.prev;remove(last);map.remove(last.key);}}private Node getNode(int key){Node node = map.get(key);if(node == null) return null;remove(node);addLeft(node);return node;}private void remove(Node node){node.next.prev = node.prev;node.prev.next = node.next;}private void addLeft(Node node){//插到烧饼节点后面node.prev = head;node.next = head.next;head.next.prev = node;head.next = node;// node.prev.next = node;// node.next.prev = node;}
}

关键字:手机qq网页版网站_设计接单平台app排行榜_佛山网页搜索排名提升_十大互联网广告公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: