当前位置:网站首页>LeetCode146. LRU cache
LeetCode146. LRU cache
2022-07-05 02:47:00 【C-position debut_ two thousand and twenty-two】
LRU Full name Least Recently Used, The least used recently , The first time I heard this concept was in the operating system course of my junior , For page replacement algorithm , For virtual page storage management services .
LRU The proposed algorithm is based on a fact , Pages that are frequently used in the previous instructions are likely to be frequently used in the next few instructions , Conversely, if you haven't used it for a long time, you think you won't use it next , This is the principle of locality
Now? LRU Algorithms are also often used as cache obsolescence strategies .
LeetCode146. LRU Cache is such a problem , It is said that this is also a common point of interview
In fact, if you understand the principle and use the right method, it is not difficult
Obviously, this cache is in order , Eliminate cache from the end of the bidirectional linked list , Add and get Methods put the node at the head , It's not difficult to follow the code thinking
public class LRUCache {
private Map<Integer, MyLinkedNode> cache = new HashMap<Integer, MyLinkedNode>();
private int capacity;// Initialize capacity
private int size;// Cache existing quantity
private MyLinkedNode head,tail;
public LRUCache(int capacity) {
this.size = 0;
this.capacity = capacity;
head = new MyLinkedNode();
tail = new MyLinkedNode();
head.next = tail;
tail.prev = head;
}
public int get(int key) {
MyLinkedNode node = cache.get(key);
if(node == null){
return -1;
}
moveToHead(node);// Every time get Just put the node into the head , It means using more
return node.value;
}
public void put(int key, int value) {
MyLinkedNode node = cache.get(key);
if(node == null){// If this node does not exist, create one and add it to the cache
MyLinkedNode newNode = new MyLinkedNode(key,value);
cache.put(key,newNode);
addToHead(newNode);
++size;
if(size > capacity){
// If the capacity exceeds, delete the tail node of the linked list
MyLinkedNode tail = deleteTail();
cache.remove(tail.key);// According to this key Index delete cache The key value in it is right
--size;
}
}else {// This key If it exists , Just modify value And move to the head
node.value = value;
moveToHead(node);
}
}
private void addToHead(MyLinkedNode node){// Add nodes to the chain header
node.prev = head;
node.next = head.next;
head.next.prev = node;
head.next = node;
}
private void moveToHead(MyLinkedNode node){// Transfer the nodes in the linked list to the head
removeNode(node);
addToHead(node);
}
private void removeNode(MyLinkedNode node){// Delete node
node.prev.next = node.next;
node.next.prev = node.prev;
}
private MyLinkedNode deleteTail(){// Delete tail node
MyLinkedNode res = tail.prev;
removeNode(res);
return res;
}
class MyLinkedNode{// Two-way list node
int key;
int value;
MyLinkedNode prev;
MyLinkedNode next;
public MyLinkedNode(){}
public MyLinkedNode(int key,int value){
this.key = key;
this.value = value;
}
}
public static void main(String[] args) {
LRUCache cache = new LRUCache(2);
cache.put(1,1);
cache.put(2, 2);
System.out.println(cache.get(1));
cache.put(3, 3);
System.out.println(cache.get(2));
cache.put(4, 4);
System.out.println(cache.get(1));
System.out.println(cache.get(3));
System.out.println(cache.get(4));
}
}
When I read the comment section of this topic, someone said , Why does the customized node have key This attribute ,cache Variables are not based on key Did you save it , There is only one in the node value Is it not good?
without key If so, we need to delete the tail node when we eliminate the cache , Note that the node we deleted only dereferences the nodes in the bidirectional linked list , But this node is map Type of cache It's still real , If we don't have any nodes key What to use as an index to delete cache The key value in it is right . This is the maintenance in the user-defined linked list node key The key
边栏推荐
- Breaking the information cocoon - my method of actively obtaining information - 3
- Pytest (4) - test case execution sequence
- Sqoop安装
- Simple use of devtools
- Zabbix
- TCP security of network security foundation
- Marubeni Baidu applet detailed configuration tutorial, approved.
- Medusa installation and simple use
- The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
- Hmi-32- [motion mode] add light panel and basic information column
猜你喜欢
Can you really learn 3DMAX modeling by self-study?
【LeetCode】106. Construct binary tree from middle order and post order traversal sequence (wrong question 2)
2021 Li Hongyi machine learning (1): basic concepts
Moco V2 literature research [self supervised learning]
Design of KTV intelligent dimming system based on MCU
ELFK部署
Apache build web host
Design and implementation of community hospital information system
Voice chip wt2003h4 B008 single chip to realize the quick design of intelligent doorbell scheme
Design and implementation of high availability website architecture
随机推荐
Good documentation
Hmi-31- [motion mode] solve the problem of picture display of music module
Port, domain name, protocol.
GFS分布式文件系统
Utilisation simple de devtools
问题解决:AttributeError: ‘NoneType‘ object has no attribute ‘append‘
Devtools的簡單使用
The database and recharge are gone
问下,这个ADB mysql支持sqlserver吗?
Design and implementation of kindergarten management system
"C zero foundation introduction hundred knowledge and hundred cases" (72) multi wave entrustment -- Mom shouted for dinner
Use UDP to send a JPEG image, and UPD will convert it into the mat format of OpenCV after receiving it
Application and Optimization Practice of redis in vivo push platform
100 basic multiple choice questions of C language (with answers) 04
How to make OS X read bash_ Profile instead of Profile file - how to make OS X to read bash_ profile not . profile file
Leetcode takes out the least number of magic beans
The most powerful new household god card of Bank of communications. Apply to earn 2100 yuan. Hurry up if you haven't applied!
[Yu Yue education] National Open University spring 2019 0505-22t basic nursing reference questions
【微服务|SCG】Filters的33种用法
[uc/os-iii] chapter 1.2.3.4 understanding RTOS