首先 先写点儿感悟吧:

本来计划是 晚上回家写的  后来发现还是没坚持的了  上午花了一个多小时  做了一下这个题目  应该还有提高的空间 的,这个题目是在力扣里面看到的  为什么看到这个题目 是因为 我最近在看极客时间里面消息队列有关的课程 有一章讲到了 使用缓存来减少磁盘的IO 里面讲到了这个LRU 置换算法   哎  真的一脸懵逼呀,后来花了2个晚上时间 看了很多文章  涉及到了数据结构  算法 等一系列知识   哪个时候真的感觉内心空洞,毕业X年了  都不好意思说,一些基础  真的 很缺乏    感叹 大学 没好好的学,好了 不说了 show code

public class LRUCache
{
private LinkedList<KeyValuePair<int, int>> linkedList = new LinkedList<KeyValuePair<int, int>>();//双链表 private Dictionary<int, LinkedListNode<KeyValuePair<int, int>>> keyValuePairs = new Dictionary<int, LinkedListNode<KeyValuePair<int, int>>>();//哈希字典
private int _capacity = ; public LRUCache(int capacity)
{
keyValuePairs = new Dictionary<int, LinkedListNode<KeyValuePair<int, int>>>(capacity);
_capacity = capacity;
} public int Get(int key)
{
if (keyValuePairs.ContainsKey(key) == false)
{
Console.WriteLine($"输出的值是:-1");
return -;
}
var node = keyValuePairs[key].Value;
Put(key, node.Value);
Console.WriteLine($"输出的值是:{node.Value}");
return node.Value;
} public void Put(int key, int val)
{
LinkedListNode<KeyValuePair<int, int>> newLinkedListNode = new LinkedListNode<KeyValuePair<int, int>>(KeyValuePair.Create(key, val));
if (keyValuePairs.ContainsKey(key))
{
linkedList.Remove(keyValuePairs[key]);
linkedList.AddFirst(newLinkedListNode);
// keyValuePairs.Add(key, newLinkedListNode);
keyValuePairs[key] = newLinkedListNode;//更新dic key 中的值 不能用add 会报错
}
else
{
if (_capacity == linkedList.Count)
{
LinkedListNode<KeyValuePair<int, int>> lastNode = linkedList.Last;
linkedList.RemoveLast();
keyValuePairs.Remove(lastNode.Value.Key);
} linkedList.AddFirst(newLinkedListNode);
keyValuePairs.Add(key, newLinkedListNode);
} } }

测试代码

 static void Main(string[] args)
{
LRUCache cache = new LRUCache( /* 缓存容量 */ ); cache.Put(, );
cache.Put(, );
cache.Get(); // 返回 1
cache.Put(, ); // 该操作会使得密钥 2 作废
cache.Get(); // 返回 -1 (未找到)
cache.Put(, ); // 该操作会使得密钥 1 作废
cache.Get(); // 返回 -1 (未找到)
cache.Get(); // 返回 3
cache.Get(); // 返回 4 }

截图 力扣里面的运行结果:

从运行结果上面看  这个内存消耗还是很严重的  后面慢慢研究下怎么去改进:

贴上题目的地址:https://leetcode-cn.com/problems/lru-cache/

希望 自己能继续保持  继续加油~ 留给我的时间不多了~

LRU 的C# 实现的更多相关文章

  1. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  2. OS存储管理——FIFO,LRU,OPT命中率

    课程设计课题 存储管理程序设计 摘 要 虚拟存储器作为现代操作系统中存储管理的一项重要技术,实现了内存扩充功能.而分页请求分页系统正好可以完美的支持虚拟存储器功能,它具有请求调页功能和页面置换功能.在 ...

  3. [LeetCode] LRU Cache 最近最少使用页面置换缓存器

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  4. 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)

    在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...

  5. 页置换算法FIFO、LRU、OPT

    页置换算法FIFO.LRU.OPT 为什么需要页置换 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调 ...

  6. LRU LFU FIFO 转载

    -------------------------------------->href--------------------------> http://blog.chinaunix.n ...

  7. 缓存淘汰算法--LRU算法

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那么将来被访问的几率也 ...

  8. 【leetcode】LRU Cache

    题目简述: Design and implement a data structure for Least Recently Used (LRU) cache. It should support t ...

  9. memcache的lru删除机制

    惰性删除,get时才删除 LRU原理:当某个单元被请求的时候,维护一个计数器,通过计数器来判断最近谁最少使用,那就把谁踢出去. 注:即使某个key设置的永久有效,也会被踢出来,这个就是永久数据被踢的现 ...

  10. 链表&LRU

    简介 链表就是链式存储数据的一种数据结构.双向链表每个数据存储都包含他的前后数据节点的位置信息(索引/指针). class DSChain<T> { //使用栈来进行废弃空间回收 priv ...

随机推荐

  1. CTE(With As)

    WITH tabdate(dt) AS ( FROM dual UNION ALL FROM tabdate WHERE dt ) SELECT * FROM TabDate ; 一.With Tab ...

  2. icepdf和pdfbox转pdf文档为图片

    icepdf转pdf文档为图片 首先导入icepdf jar包或maven pdfPath为pdf文件路径.pdfimgpsth为图片保存的路径 public static void icePdfIm ...

  3. 详解 Arrays类

    请关注本人博文--<详解 普通数组 -- Arrays类 与 浅克隆> Arrays类: 概述: 针对数组进行操作的工具类.它提供了对于数组的值的排序.查找等功能. 现在,本人来展示一下A ...

  4. Linux系统安装docker教程-CentOS7(完美教程)

     一.前言 最近有网友反应不在安装Linux 安装docker,为了方便大家更快的安装,以CentOS7安装为例,写了一篇比较简单的博客,让大家学习. 二.背景介绍 Linux,全称GNU/Linux ...

  5. Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)

    目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...

  6. tp5.1部署到IIS服务器404

    本人小白一枚,本地用的apache环境,公司让做了一个小项目,在本地写好之后,一切调试好,就直接交给了主管,之后别人负责上线. 就这样平淡的度过了两天,今天突然和我说,除了首页其他链接都是404,我想 ...

  7. automake autoconf 使用详解

    本文地址: http://www.laruence.com/2009/11/18/1154.html 文章转自: http://www.linuxcomputer.cn/ 作为Linux下的程序开发人 ...

  8. java内存模型(JMM)和happens-before

    目录 重排序 Happens-Before 安全发布 初始化安全性 java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机, ...

  9. 非阻塞算法(Lock-Free)的实现

    目录 非阻塞的栈 非阻塞的链表 非阻塞算法(Lock-Free)的实现 上篇文章我们讲到了使用锁会带来的各种缺点,本文将会讲解如何使用非阻塞算法.非阻塞算法一般会使用CAS来协调线程的操作. 虽然非阻 ...

  10. Spring5参考指南:JSR 330标准注解

    文章目录 @Inject 和 @Named @Named 和 @ManagedBean 之前的文章我们有讲过,从Spring3.0之后,除了Spring自带的注解,我们也可以使用JSR330的标准注解 ...