1. 题目
2. 思路
(1) 队列+哈希表
- 利用队列维护key的淘汰顺序,每次get或set,若存在key,则将key从队列中删除,重新加入队尾。
- 利用哈希表存储真实的key-value数据。
3. 代码
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public int capacity;
public Queue<Integer> queue;
public Map<Integer, Integer> map;
public Solution(int capacity) {
this.capacity = capacity;
queue = new LinkedList<>();
map = new HashMap<>();
}
public int get(int key) {
if (map.containsKey(key)) {
queue.remove(key);
queue.offer(key);
return map.get(key);
}
return -1;
}
public void set(int key, int value) {
if (map.containsKey(key)) {
map.put(key, value);
get(key);
} else {
if (queue.size() == capacity) {
map.remove(queue.poll());
}
map.put(key, value);
queue.offer(key);
}
}
}