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

百度网站优化软件百度搜索

百度网站优化软件,百度搜索,wordpress双站 中英文,jsp做网站框架146. LRU 缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&#x…

146. LRU 缓存

请你设计并实现一个满足  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

思考:

// # 键值对--哈希表

// # 出入顺序--栈、队列、链表

// # 随机访问,插入头部或者尾部--双向链表 O(1)

// # 包括插入、移动、删除

使用一个哈希表来存储键和它们对应的值以及在双向链表中的位置,同时使用一个双向链表来维护键的最近使用顺序。在执行get操作时,如果键存在,则将其对应的节点移动到双向链表的末尾,表示最近被访问;在执行put操作时,如果键已存在,则更新其值并移动到链表末尾,如果键不存在,则检查缓存是否已满,若已满则从链表头部移除最久未使用的键,然后添加新键值对到缓存中。这样,通过结合哈希表的快速查找和双向链表的顺序维护,实现了平均时间复杂度为O(1)的LRU缓存机制。

参考代码(c++):

class LRUCache {// # 键值对--哈希表// # 出入顺序--栈、队列、链表// # 随机访问,插入头部或者尾部--双向链表// # 包括插入、移动、删除
private:int capacity0; // 缓存的容量list<int> keyList; // 用于维护键的顺序,最近使用的在末尾unordered_map<int, pair<int, list<int>::iterator>> hashMap; // 哈希表,存储键、值和键在keyList中的迭代器public:LRUCache(int capacity) {capacity0 = capacity; // 初始化缓存容量}int get(int key) {auto it = hashMap.find(key); // 在哈希表中查找键if(it != hashMap.end()){ // 如果找到了键keyList.erase(it->second.second); // 从keyList中移除旧的键keyList.push_back(key); // 将键重新添加到keyList的末尾,表示最近被访问hashMap[key].second = (--keyList.end()); // 更新哈希表中的迭代器,指向新的末尾位置return it->second.first; // 返回键对应的值}return -1; // 如果键不存在,返回-1}void put(int key, int value) {if(hashMap.find(key) != hashMap.end()){ // 如果键已经存在hashMap[key].first = value; // 更新键对应的值keyList.erase(hashMap[key].second); // 从keyList中移除旧的键keyList.push_back(key); // 将键重新添加到keyList的末尾hashMap[key].second = (--keyList.end()); // 更新哈希表中的迭代器,指向新的末尾位置return; // 更新完成后返回}if(hashMap.size() < capacity0){ // 如果当前缓存大小小于容量Insert(key, value); // 调用Insert函数插入新的键值对}else{int removeKey = keyList.front(); // 获取并移除keyList中的第一个元素(最久未使用的键)keyList.pop_front(); // 从keyList中移除第一个元素hashMap.erase(removeKey); // 从哈希表中移除对应的键值对Insert(key, value); // 插入新的键值对}}// 插入或更新键值对的辅助函数void Insert(int key, int value){keyList.push_back(key); // 将键添加到keyList的末尾hashMap[key] = make_pair(value, --keyList.end()); // 在哈希表中添加键值对和迭代器}
};/*** 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.yidumall.com/news/85631.html

相关文章:

  • 我自己做个网站怎么做厦门网站推广优化哪家好
  • 整站seoseo优化seo指的是搜索引擎
  • 注册公司流程和要求seocms
  • 网站系统目前运行稳定百度推广网站
  • 生成图片链接的网站某个网站seo分析实例
  • 怎么登录甘肃省建设厅网站离我最近的电脑培训中心
  • 网站的目录结构整站优化seo公司哪家好
  • 山东省建设管理中心网站首页北京网站优化经理
  • 西湖区外贸网站建设网络营销的核心是用户吗
  • 哈尔滨网站推广优化公司百度商务合作电话
  • 黑龙江省建设安全协会网站廊坊百度快照优化哪家服务好
  • 深圳龙岗招聘网seo关键词排名怎么提升
  • 彩票网站做一级代理犯法吗没广告的视频播放器app
  • 上海做网站优化哪家好网络营销环境
  • 保定微网站 建设网页制作咨询公司
  • 牡丹菏泽网站建设互联网推广引流
  • 专门做游戏交易的网站有哪些今日军事新闻最新消息中国
  • 如何查看自己做的网站大小seo云优化公司
  • 长沙点梦网站建设公司怎么样网站开发的基本流程
  • 广西建设工程造价管理协会网站推广seo是什么意思
  • 怎样做禁毒网站的试卷长春seo排名扣费
  • 影响网站排名的因素优化大师tv版
  • bilibili推广网站微信公众号推广方法有哪些
  • 网站关键词怎么选择广州网站到首页排名
  • 购物网站图片的放大怎么做的关键词大全
  • 素材下载网站模板关键词简谱
  • 网络营销的企业网站1688如何搜索关键词排名
  • 中国交通建设监理协会官方网站安卓优化大师手机版下载
  • 策划设计网站百度销售岗位怎么样
  • 银川网站建设培训哪家好seo收费标准