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

网络营销相关的资源网站下载手机百度最新版

网络营销相关的资源网站,下载手机百度最新版,邢台市旅游景点排名前十,政府网站建设思路题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返…

题目

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。
实现 LRUCache 类:
LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存
int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。
void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value ;如果不存在,则向缓存中插入该组 key-value 。如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。
函数 get 和 put 必须以 O(1) 的平均时间复杂度运行。

示例:

输入
[“LRUCache”, “put”, “put”, “get”, “put”, “get”, “put”, “get”, “get”, “get”]
[[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]
输出
[null, null, null, 1, null, -1, null, -1, 3, 4]

解释
LRUCache lRUCache = new LRUCache(2);
lRUCache.put(1, 1); // 缓存是 {1=1}
lRUCache.put(2, 2); // 缓存是 {1=1, 2=2}
lRUCache.get(1); // 返回 1
lRUCache.put(3, 3); // 该操作会使得关键字 2 作废,缓存是 {1=1, 3=3}
lRUCache.get(2); // 返回 -1 (未找到)
lRUCache.put(4, 4); // 该操作会使得关键字 1 作废,缓存是 {4=4, 3=3}
lRUCache.get(1); // 返回 -1 (未找到)
lRUCache.get(3); // 返回 3
lRUCache.get(4); // 返回 4

提示:

1 <= capacity <= 3000
0 <= key <= 10000
0 <= value <= 105
最多调用 2 * 105 次 get 和 put

解决思路

使用Map加双链表实现即可,参考Java里LinkedHashMap

解决方法

    class Node(key: Int, value: Int) {var pre: Node? = nullvar nex: Node? = nullvar value: Intvar key: Intinit {this.value = valuethis.key = key}}class LRUCache(capacity: Int) {var map = mutableMapOf<Int, Node>()private var dumpHead: Node = Node(-1, -1)private var dumpTail: Node = Node(-1, -1)var mCapability = capacityinit {dumpHead.nex = dumpTaildumpTail.pre = dumpHead}fun get(key: Int): Int {val value = map.getOrDefault(key, null)if (value != null) {updateNodeToHeadNext(map[key])}return value?.value ?: -1}fun put(key: Int, value: Int) {if (map.containsKey(key)) {updateNodeToHeadNext(map[key])map[key]!!.value = value} else {val node = Node(key, value)dumpHead.nex!!.pre = nodenode.nex = dumpHead.nexdumpHead.nex = nodenode.pre = dumpHeadmap[key] = node}while (map.size > mCapability) {dumpTail.pre?.let {it.pre!!.nex = dumpTaildumpTail.pre = it.premap.remove(it.key)}}}private fun updateNodeToHeadNext(find: Node?) {if (find != null) {find.nex!!.pre = find.prefind.pre!!.nex = find.nexdumpHead.nex!!.pre = findfind.nex = dumpHead.nexdumpHead.nex = findfind.pre = dumpHead}}}

偷懒版:

    class CacheMap(initialCapacity: Int, loadFactor: Float, accessOrder: Boolean) :LinkedHashMap<Int, Int>(initialCapacity, loadFactor, accessOrder) {private val initC = initialCapacityoverride fun removeEldestEntry(eldest: MutableMap.MutableEntry<Int, Int>?): Boolean {return size > initC}}class LRUCache(capacity: Int) {var map = CacheMap(capacity, 0.5f, true)fun get(key: Int): Int {return map.getOrDefault(key,-1)}fun put(key: Int, value: Int) {map[key] = value}}

总结

1.事非经过不知难。 本以为很简单 结果还是一个小时下来了

2.哎 之前面试过这个题 但是自己直接说用LinkedHashMap

3.为了保证时间复杂度为O(1),Map 里 value 为 Node
方便对Node进行调整。

http://www.mmbaike.com/news/48992.html

相关文章:

  • 做的网站手机打不开怎么回事手机网站建设案例
  • 网站建设课程论文江西优化中心
  • 视频教学网站cms手机网站智能建站
  • 公司网站一般用什么软件做如何自己做网络推广
  • 公司网站设计网络公司抖音账号权重查询
  • 网站url建设如何自己做引流推广
  • 茶叶网站建设公司seo推广思路
  • 做家电维修网站能接到单吗关键词优化系统
  • 2023最新装修效果图开封搜索引擎优化
  • 郑州 网站建设百度推广优化是什么?
  • 17网站一起做网店普宁池尾免费自建网站有哪些
  • 个人网站建设与实现毕业设计seo推广的方法
  • 珠海网站制作价格品牌推广服务
  • 自己做网站导航页搜索引擎优化与推广技术
  • 厦门app网站建设搜狗友链交换
  • 无线网站应建设在什么地方自己接单的平台
  • 太原模板建站定制网络运营是什么专业
  • 自建网站如何盈利推广网络广告
  • 市场监督局网站电子签名怎么做下载关键词推广软件
  • wordpress 媒体库 分类厦门网站搜索引擎优化
  • dede网站301怎么做雅思培训班价格一览表
  • 专业定制网架优化最狠的手机优化软件
  • 自己搭建服务器做网站关键词优化骗局
  • 网站开发需要哪些知识和工具色盲测试图片
  • 微网站的定义私域营销
  • web前端学什么seo排名赚app是真的吗
  • 个人域名可以建公司网站吗网页设计和网站制作
  • 北京服装设计公司排名前十强百度seo排名在线点击器
  • 网站备案图标代码打开百度官网
  • 建设网站的风险分析站长工具关键词挖掘