模拟就行!!!
import java.util.*;
public class Solution {
/**
* lru design
* @param operators int整型二维数组 the ops
* @param k int整型 the k
* @return int整型一维数组
*/
public int[] LRU (int[][] operators, int k) {
// write code here
class Node{
int key,value;
Node(int key,int value){
this.key = key;
this.value = value;
}
// List的indexOf是通过equals比较判断的,这里重写判断key的方法,key相同就代表一样
public boolean equals(Object obj) {
Node on = (Node)obj;
return on.key == this.key;
}
}
// 缓存
List<Node> list = new ArrayList<>();
// 题目要的结果集
List<Integer> res = new ArrayList<>();
for(int i=0; i<operators.length; i++){
// set(key,value)
if(operators[i][0] == 1){
int index = list.indexOf(new Node(operators[i][1],0));
// key不存在,就添加到缓存
if(index == -1){
list.add(new Node(operators[i][1],operators[i][2]));
// 存在就更新value
}else{
Node n = list.get(index);
n.value = operators[i][2];
list.remove(index);
list.add(index,n);
}
// 超过k,就把第一个干掉
if(list.size() == k+1){
list.remove(0);
}
// get(key)
}else if(operators[i][0] == 2){
int index = list.indexOf(new Node(operators[i][1],0));
// key不存在
if(index == -1){
res.add(-1);
// key存在,把它移动到缓存的最后
}else{
Node n = list.get(index);
res.add(n.value);
list.remove(index);
list.add(n);
}
}
}
Object[] rO = res.toArray();
int[] result = new int[rO.length];
for(int i=0; i<rO.length; i++){
result[i] = (int) rO[i];
}
return result;
}
}
京公网安备 11010502036488号