当前位置: 首页 > news >正文

大连做网站谁家售后好双11各大电商平台销售数据

大连做网站谁家售后好,双11各大电商平台销售数据,wordpress本地主题,蒙文网站建设的意义为了实现一个满足 LRU(最近最少使用)缓存约束的数据结构,我们需要在 (O(1)) 时间复杂度内完成 get 和 put 操作。这通常可以通过结合使用哈希表和双向链表来实现: 哈希表:用于在 (O(1)) 时间复杂度内实现对缓存中元素…

为了实现一个满足 LRU(最近最少使用)缓存约束的数据结构,我们需要在 (O(1)) 时间复杂度内完成 getput 操作。这通常可以通过结合使用哈希表和双向链表来实现:

  • 哈希表:用于在 (O(1)) 时间复杂度内实现对缓存中元素的快速访问。
  • 双向链表:用于维护缓存中元素的顺序,以便在缓存容量超出限制时能够快速定位并移除最久未使用的元素。

以下是 LRUCache 类的实现:

import java.util.HashMap;
import java.util.Map;class LRUCache {private class Node {int key;int value;Node prev;Node next;Node(int key, int value) {this.key = key;this.value = value;}}private final int capacity;private final Map<Integer, Node> cache;private final Node head;private final Node tail;public LRUCache(int capacity) {this.capacity = capacity;this.cache = new HashMap<>();this.head = new Node(0, 0);this.tail = new Node(0, 0);head.next = tail;tail.prev = head;}public int get(int key) {Node node = cache.get(key);if (node == null) {return -1;}// Move the accessed node to the headmoveToHead(node);return node.value;}public void put(int key, int value) {Node node = cache.get(key);if (node == null) {// Create a new nodeNode newNode = new Node(key, value);cache.put(key, newNode);addNode(newNode);if (cache.size() > capacity) {// Pop the tailNode tail = popTail();cache.remove(tail.key);}} else {// Update the valuenode.value = value;moveToHead(node);}}private void addNode(Node node) {node.prev = head;node.next = head.next;head.next.prev = node;head.next = node;}private void removeNode(Node node) {Node prev = node.prev;Node next = node.next;prev.next = next;next.prev = prev;}private void moveToHead(Node node) {removeNode(node);addNode(node);}private Node popTail() {Node res = tail.prev;removeNode(res);return res;}public static void main(String[] args) {LRUCache lruCache = new LRUCache(2);lruCache.put(1, 1);lruCache.put(2, 2);System.out.println(lruCache.get(1)); // 返回 1lruCache.put(3, 3); // 该操作会使得关键字 2 作废System.out.println(lruCache.get(2)); // 返回 -1 (未找到)lruCache.put(4, 4); // 该操作会使得关键字 1 作废System.out.println(lruCache.get(1)); // 返回 -1 (未找到)System.out.println(lruCache.get(3)); // 返回 3System.out.println(lruCache.get(4)); // 返回 4}
}

解释

  1. Node 类:用于表示双向链表中的节点,包含 keyvalue,以及前驱和后继节点的引用。
  2. 构造函数:初始化缓存容量、哈希表、以及双向链表的头尾虚拟节点。
  3. get 方法:检查缓存中是否存在指定键,若存在则将该节点移动到链表头部(表示最近使用),并返回其值;否则返回 -1。
  4. put 方法:插入新键值对时,若键已存在则更新值并移动到链表头部;若键不存在则创建新节点并插入链表头部,若超出容量则移除链表尾部节点(最久未使用)。
  5. 辅助方法
    • addNode:在链表头部插入节点。
    • removeNode:从链表中移除节点。
    • moveToHead:将节点移动到链表头部。
    • popTail:移除并返回链表尾部节点。

这种设计确保了所有操作的平均时间复杂度为 (O(1))。

http://www.qdjiajiao.com/news/1651.html

相关文章:

  • 网站建设分工方案优化大师如何删掉多余的学生
  • 数字东城区住房和城市建设委门户网站产品宣传方案
  • 做网站需要知道的问题滕州百度推广
  • WordPress说说心情南京seo网站优化
  • 网站建站平台排行榜谷歌关键词工具
  • 免费版vesta安装WordPress小红书seo关键词优化多少钱
  • 丽水 网站建设互联网运营推广公司
  • 网站需求设计文档百度不收录网站
  • wordpress 修改页面google优化推广
  • 沈阳网站建设024w百度收录哪些平台比较好
  • 网站首页图片滚动百度知道答题赚钱
  • 做网站需要哪些条件太原网站建设方案咨询
  • 烟台做网站优化哪家好seo外链发布
  • 网站设计与网页制作项目教程微信公众号推广软文案例
  • 精美 企业网站模板自己的网站
  • 做高端网站的网络公司现在推广引流什么平台比较火
  • 网站彩票做号seo营销优化软件
  • 做游戏类型的网站的好处百度官网链接
  • 中学建设校园网站方案账号权重查询入口
  • 公司网站建设的项目工作分解结构千川推广官网
  • 网站企业模板国外网站排名 top100
  • 外省住房和城乡建设厅网站建网站软件
  • 专业网站建设微信商城开发网络营销策划创意案例点评
  • wordpress支付插件seo优化费用
  • 泰达建设集团网站淘宝指数转换工具
  • 合肥网约车从业资格证seo短视频入口
  • 外贸网站如何引流怎么做小说推广挣钱
  • 怎么查看网站收录sem竞价账户托管
  • 零基础学习网站开发四大营销策略
  • 网站费用明细搜狗收录提交