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

大连做网站谁家售后好单页关键词优化费用

大连做网站谁家售后好,单页关键词优化费用,专科千万别学数字媒体应用技术,公司网站注销流程为了实现一个满足 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.hengruixuexiao.com/news/11829.html

相关文章:

  • 新乡网站建设哪家正规优云优客百度推广效果怎么样
  • 响应式网站设计的主页东莞seo优化排名推广
  • 买了dede模板之后就可以做网站网站推广优化怎样
  • 淄博网站建设团队杭州网站seo优化
  • 个人网站建设 优帮云湖南关键词优化排名推广
  • 外贸公司的网站建设关键词排名查询
  • 公司网站建设服务排位及资讯
  • 网站推广策划案360网站收录提交入口
  • 做一个营销网站做网站哪家好
  • 网站备案申请流程福建优化seo
  • 网站开发者不给源代码怎么办学大教育一对一收费价格表
  • 找别人做网站可以提供源码吗网站建设推广优化
  • 网站空间免免费创建属于自己的网站
  • 用dw做网站导航的步骤最有效的广告宣传方式
  • 中国铁路建设投资公司网站熊学军郑州做网站推广哪家好
  • 股票查询网站模板 wordpress数字营销案例
  • 移动网站虚拟主机怎么接游戏推广的业务
  • 墨子网站建设高德北斗导航
  • 桂林网站制作培训学校百度站点
  • 几种语言的网站如何做搜索引擎的营销方法有哪些
  • 介休市网站建设公司无锡seo公司哪家好
  • 小说网站搭建教程最新百度快速收录技术
  • 没有外贸网站 如果做外贸南京百度推广开户
  • 武汉做网站公司hlbzx温州seo排名优化
  • 网站开发运行环境百度世界500强排名
  • 点图片跳到网站怎么做的百度退推广费是真的吗
  • 广州广告网站建设新闻最近的大事10件
  • 西部数码虚拟主机怎么做网站建立一个企业网站需要多少钱
  • 广告设计师工作内容成都seo工程师
  • 厦门谷歌推广seo网络推广怎么做