zoukankan      html  css  js  c++  java
  • LRU设计

    list是双向链表,map保存key对应到list中的迭代器的位置,list保存<key,value>

    class LRUCache {
    private:
    	int c;
    	map<int, list<pair<int, int>>::iterator> mymap;
    	list<pair<int, int>> mylist;
    public:
    	
    	LRUCache(int capacity) {
    		// do intialization if necessary
    		c = capacity;
    	}
    
    	 
    	  int get(int key) {
    		  // write your code here
    		  if (mymap.count(key) == 0)
    			  return -1;
    		  list<pair<int, int>>::iterator it = mymap[key];
              int val= it->second;
        
    		  mylist.erase(it);
    		  mylist.push_front(pair<int, int>(key,val));
    		  mymap[key] = mylist.begin();
    		  return val;
    	  }
    
    	 
    	  void put(int key, int value) {
    		  // write your code here
    		  if (mymap.count(key) == 0)
    		  {
    			  if (mymap.size() == c)
    			  {
    				  int tmpkey = mylist.back().first;
    				  mylist.pop_back();
    				  mymap.erase(tmpkey);
    				 
    			  }
    			  mylist.push_front(pair<int, int>(key, value));
    			  mymap[key] = mylist.begin();
    		  }
    		  else
    		  {
    			  list<pair<int, int>>::iterator it = mymap[key];
    			  mylist.erase(it);
    			  mylist.push_front(pair<int, int>(key, value));
    			  mymap[key] = mylist.begin();
    		  }
    	  }
    };
    

      

  • 相关阅读:
    SpringBoot之集成Socket
    SpringBoot之集成WebSocket
    SpringBoot之统一异常处理
    请求的转发和重定向
    5+App使用定位
    将Tomcat注册为Windows服务
    Tomcat环境变量设置
    CentOS7搭建Gitlab详细过程
    Python 12 内置函数
    Python 11 生成器
  • 原文地址:https://www.cnblogs.com/wuxiangli/p/5638152.html
Copyright © 2011-2022 走看看