题解 | #设计LRU缓存结构#
设计LRU缓存结构
http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61
# 一步步求解
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
List<Integer> lst = new ArrayList<>();
List<Integer> priority = new ArrayList<>();//优先级
Map<Integer, Integer> map = new HashMap<>();
int len = operators.length;
if (k==0){
for (int i = 0; i < len; i++) {
lst.add(-1);
}
return lst.stream().mapToInt(x -> x).toArray();
}
for (int i = 0; i < len; i++) {
if (operators[i][0] == 1) {
//添加新kv
//删除优先级最低的kv 把新kv加到map中 为新的kv设置优先级
if (priority.size() == k) {
//删除优先级最低的kv
priority.remove(0);
map.remove(0);
}
map.put(operators[i][1], operators[i][2]);
priority.add(operators[i][1]);
} else if (operators[i][0] == 2) {
int pos = 0;
while (pos<priority.size()){
if (priority.get(pos)==operators[i][1])
break;
pos++;
}
if (pos<priority.size()){
for (int j = 0; j < priority.size(); j++) {
if (j > pos)
priority.set(j - 1, priority.get(j));
}
priority.set(priority.size() - 1, operators[i][1]);
lst.add(map.get(operators[i][1]));//结果集
}
else {
lst.add(-1);
}
//优先级设为最高
}
}
return lst.stream().mapToInt(x -> x).toArray();
}
}