1. aaarticlea/png;base64,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" alt="" />
    1 package leetcode;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5.  
  6. class Node{
  7. int key;
  8. int value;
  9. Node pre;
  10. Node next;
  11. Node(int key,int value){
  12. this.key=key;
  13. this.value=value;
  14. this.pre=null;
  15. this.next=null;
  16. }
  17. }
  18. class CacheList{
  19. private Node head;
  20. private Node tail;
  21. CacheList(int capacity){
  22. head = new Node(0,0);
  23. tail = new Node(0,0);
  24. head.next=tail;
  25. tail.pre=head;
  26. }
  27. public void insertFirst(Node n){
  28. n.next=head.next;
  29. head.next.pre=n;
  30. head.next=n;
  31. n.pre=head;
  32.  
  33. }
  34. public Node removeLast(){
  35. Node re = tail.pre;
  36. tail.pre.pre.next=tail;
  37. tail.pre=tail.pre.pre;
  38. return re;
  39. }
  40. public void shiftToFirst(Node n){
  41. n.pre.next=n.next;
  42. n.next.pre=n.pre;
  43. insertFirst(n);
  44. }
  45. }
  46.  
  47. public class LRUCache {
  48. Map<Integer,Node> map;
  49. CacheList cacheList;
  50. int capacity;
  51. public LRUCache(int capacity) {
  52. map = new HashMap<Integer,Node>();
  53. cacheList= new CacheList(capacity);
  54. this.capacity=capacity;
  55. }
  56.  
  57. public int get(int key) {
  58. if(map.get(key)==null)
  59. return -1;
  60. else {
  61. Node n= (Node) map.get(key);
  62. cacheList.shiftToFirst(n);
  63. return n.value;
  64. }
  65. }
  66.  
  67. public void set(int key, int value) {
  68. if(map.containsKey(key)){
  69. Node come= (Node) map.get(key);
  70. come.value=value;
  71. cacheList.shiftToFirst(come);;
  72. }else{
  73. if(map.size()==capacity){
  74. Node old=cacheList.removeLast();
  75. map.remove(old.key);
  76.  
  77. }
  78. Node nn=new Node(key,value);
  79. cacheList.insertFirst(nn);
  80. map.put(key, nn);
  81. }
  82.  
  83. }
  84. public static void main(String[] args){
  85. LRUCache l = new LRUCache(1);
  86. l.set(2, 1);
  87. System.out.println(l.get(2));
  88. l.set(3, 2);
  89. System.out.println(l.get(2));
  90. System.out.println(l.get(3));
  91.  
  92. }
  93. }

leetcode--003 LRU cache的更多相关文章

  1. Java for LeetCode 146 LRU Cache 【HARD】

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

  2. LeetCode之LRU Cache 最近最少使用算法 缓存设计

    设计并实现最近最久未使用(Least Recently Used)缓存. 题目描述: Design and implement a data structure for Least Recently ...

  3. leetcode@ [146] LRU Cache (TreeMap)

    https://leetcode.com/problems/lru-cache/ Design and implement a data structure for Least Recently Us ...

  4. 【LeetCode】LRU Cache 解决报告

    插话:只写了几个连续的博客,博客排名不再是实际"远在千里之外"该.我们已经进入2一万内. 再接再厉.油! Design and implement a data structure ...

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

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

  6. [LeetCode] 146. LRU Cache 近期最少使用缓存

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

  7. 【leetcode】LRU Cache

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

  8. 【leetcode】LRU Cache(hard)★

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

  9. 【Leetcode】 LRU Cache实现

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

  10. leetcode 146. LRU Cache ----- java

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

随机推荐

  1. java 使用对象

    class XiyoujiRenwu { float height,weight; String head, ear; void speak(String s) { head="歪着头&qu ...

  2. 学习笔记——单例模式Singleton

    单例模式,很容易理解,就它一个. 比如网络请求服务类WebReq.它自己生成请求线程,并管理请求数据的返回,所以我们使用它进行网络请求时,不用每次都new一个,只需要使用一个实例就行了.WebReq实 ...

  3. Linux学习 -- 备份与恢复

    备份 Linux系统需要备份的数据 /root/ /home/ /var/spool/mail /etc/ others 备份策略 完全备份 增量备份 差异备份 备份和恢复命令 dump  resto ...

  4. HDU 1043 八数码(八境界)

    看了这篇博客的讲解,挺不错的.http://www.cnblogs.com/goodness/archive/2010/05/04/1727141.html 判断无解的情况(写完七种境界才发现有直接判 ...

  5. FragmentTabHost使用注意

    FragmentTabHost使用时每次切换回Fragment时,都会再走一遍onCreateView,解决办法是缓存View,具体如下 private View rootView;//缓存Fragm ...

  6. php socket客户端及服务器端应用实例

    经常有朋友会对php的socket应用充满疑惑,本文就以实例代码作一讲解,希望能对初学php的朋友起到一点帮助作用 具体代码如下: 1.服务器端代码: <?php class SocketSer ...

  7. Android Studio ADB响应失败解决方法(2CTo.com)

    当启动Android Studio时,如果弹出 adb not responding. you can wait more,or kill "adb.exe" process ma ...

  8. hadoop的安全模式

    在安全模式下:不能增.删.改操作:但可以查看. 查看hadoop是否i处于安全模式下: 执行命令:hadoop dfsadmin -safemode get 进入hadoop的安全模式下: 执行命令: ...

  9. Servlet程序开发-- Servlet生命周期

    生命周期是一个程序的存在周期,受容器管理,所以容器决定生命周期. 生命周期包括 加载,初始化,服务,销毁,卸载 5个部分 加载:第一次使用的时候加载 初始化:init方法, 失败的话,直接卸载,如果成 ...

  10. spring-jms

    http://haohaoxuexi.iteye.com/blog/1893038 理解PooledConnectionFactory.CachingConnectionFactory和SingleC ...