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

郑州疫情最新通报长沙seo

郑州疫情最新通报,长沙seo,公司网站的建设要注意什么,深圳注册公司怎么注册文章目录 一、题目二、C# 题解 一、题目 设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的…

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

  设计和构建一个“最近最少使用”缓存,该缓存会删除最近最少使用的项目。缓存应该从键映射到值(允许你插入和检索特定键对应的值),并在初始化时指定最大容量。当缓存被填满时,它应该删除最近最少使用的项目。

  它应该支持以下操作: 获取数据 get 和 写入数据 put

  获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。
  写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间。

示例:

LRUCache cache = new LRUCache( 2 /* 缓存容量 */ );
cache.put(1, 1);
cache.put(2, 2);
cache.get(1); // 返回 1
cache.put(3, 3); // 该操作会使得密钥 2 作废
cache.get(2); // 返回 -1 (未找到)
cache.put(4, 4); // 该操作会使得密钥 1 作废
cache.get(1); // 返回 -1 (未找到)
cache.get(3); // 返回 3
cache.get(4); // 返回 4

  点击此处跳转题目。

二、C# 题解

  LRU 的思想就是将不常使用的元素优先级设置最低。因此算法规则如下:

  1. 新数据插入到链表头部;
  2. 当缓存命中(即缓存数据被访问),数据要移到表头;
  3. 当链表满的时候,将链表尾部的数据丢弃。

  这里使用数组存储链表结构,因为简单高效。

public class LRUCache {private struct Node{public int Key, Value, Left, Right;}private int    _cap, _size;private Node[] _list; // 带头结点的双向链表数组实现,_list[0] 作为头结点private int FirstPos { // 第一个结点的物理位置存储在 _list[0].Right 中get => _list[0].Right;set => _list[0].Right = value;}private int RearPos { // 尾结点的物理位置存储在 _list[0].Left 中get => _list[0].Left;set => _list[0].Left = value;}private Dictionary<int, int> _dic;public LRUCache(int capacity) {_cap = capacity;_size = 0;_list = new Node[_cap + 1];        // _list[0] 用作 head 结点,存储 first 和 rear 位置_dic = new Dictionary<int, int>(); // 记录 key 所在结点的位置 pos}public int Get(int key) {// Cache 中存在 key,则将其移到表头,并返回对应的 valueif (_dic.TryGetValue(key, out int pos)) {MoveToFirst(pos);return _list[pos].Value;}// 不存在,返回 -1return -1;}public void Put(int key, int value) {// Cache 中存在 key,则将其移到表头,并更新 valueif (_dic.TryGetValue(key, out int pos)) {MoveToFirst(pos);_list[pos].Value = value;}// 不存在 keyelse {// 链表未满,则直接插入新结点if (_size < _cap) {AddNode(key, value, ++_size); // 新结点的物理位置在数组的下一个位置_dic.Add(key, _size);         // 添加 key 的记录}// 链表已满,需要移除尾结点,将新结点插入表头else {int rear = RearPos; // 记录此时的尾结点位置ReMoveAt(rear);     // 移除尾结点_dic.Remove(_list[rear].Key);AddNode(key, value, rear); // 向表头插入新结点,物理位置就存储在刚删掉的尾结点 rear 处_dic.Add(key, rear);}}}// 向表头插入结点,结点存储在 _list[pos] 的位置中private void AddNode(int key, int value, int pos) {// 创建结点_list[pos].Key = key;_list[pos].Value = value;// 插入表头_list[pos].Left = 0;_list[pos].Right = FirstPos;_list[FirstPos].Left = pos;FirstPos = pos;}// 将 pos 位置处的结点移到表头private void MoveToFirst(int pos) {ReMoveAt(pos);                                  // 将该结点从链表中移出AddNode(_list[pos].Key, _list[pos].Value, pos); // 再插入表头}// 将 _list[pos] 处的结点从链表中移除private void ReMoveAt(int pos) {int leftPos  = _list[pos].Left;int rightPos = _list[pos].Right;_list[leftPos].Right = rightPos;_list[rightPos].Left = leftPos;}
}/*** 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);*/
  • 时间:176 ms,击败 100.00% 使用 C# 的用户
  • 内存:64.35 MB,击败 85.71% 使用 C# 的用户
http://www.15wanjia.com/news/50501.html

相关文章:

  • 英文网站建设深圳seo优化步骤
  • 我可以复制别人网站代码自己做我的网站吗具软文媒体
  • 如何自建淘宝客网站百度百科推广联系方式
  • 网站开发需要什么人员深圳整站seo
  • 南乐网站建设公司百度下载安装到桌面上
  • 域名免费注册网站怎么做
  • 伤豆丁文库网站开发自己怎么做一个网页
  • 龙游网站制作运营商推广5g技术
  • 中山做外贸网站建设东莞网络公司电话
  • 扬州网站建设小程序百度网站推广价格
  • 我想找个郑州做网站的百度快照怎么使用
  • 做网站联系方式公司网站设计与制作
  • 网页设计和网站开发广州seo推广培训
  • 只做财经的网站电商网站建设 网站定制开发
  • 石家庄做网站 vtkj广东东莞疫情最新消息今天又封了
  • 企业网站改造优化百度竞价推广登陆
  • 应用开发是什么常州seo外包公司
  • 网站底部浮动电话广告平原县网站seo优化排名
  • 公司制作个网站网坛最新排名
  • 学做网站论坛vip美国最新消息今天 新闻
  • 龙岩网站设计招聘信息培训课程开发
  • 网页怎么做成网站营销网站大全
  • 如何用python开发网页seo学习网站
  • 动态网站建设步骤百度打广告多少钱
  • 网站备案多个域名百度推广官方网站登录入口
  • 贵阳做网站找哪家好软件推广赚钱
  • 汕尾市企业网站seo点击软件营销和销售的区别在哪里
  • wordpress网站加cnzz百度网站收录提交
  • 网站建设技巧seo推广服务
  • vs2010 c 网站开发成都高薪seo