方法:将二维数组中的每一项的从下标为1开始,到结束的元素,以map形式存放在List中!
个人觉得的这种方法十分常规,大家看题解就可以看懂。
import java.util.*;
public class Solution {
/**
* lru design
* @param operators int整型二维数组 the ops
* @param k int整型 the k
* @return int整型一维数组
*/
public static int[] LRU (int[][] operators, int k) {
int row = operators.length;
int col = operators[0].length;
List<Map<Integer,Integer>> list = new ArrayList<>();
ArrayList<Integer> arrayList = new ArrayList<>();
for(int i=0;i<row;i++){
System.out.println("=========i="+i+"===========");
if(operators[i][0]==1){
if(list.size()<k) {
Map<Integer,Integer> map = new HashMap<>();
map.put(operators[i][1],operators[i][2]);
list.add(map);
//System.out.println("size<3时:"+Arrays.toString(list.toArray()));
}
else if(list.size()==k){
list.remove(0);
// System.out.println("size=3时,删除第一位后:"+Arrays.toString(list.toArray()));
Map<Integer,Integer> map = new HashMap<>();
map.put(operators[i][1],operators[i][2]);
list.add(map);
//System.out.println("size=3时,加入新一位后:"+Arrays.toString(list.toArray()));
}
// System.out.println(Arrays.toString(list.toArray()));
}
else if(operators[i][0]==2){
int size = arrayList.size();
for(int j=list.size()-1;j>=0;j--){
// System.out.println(list.get(j).get(operators[i][1]));
if(list.get(j).get(operators[i][1])!=null){
// System.out.println(list.get(j).get(operators[i][1]));
arrayList.add(list.get(j).get(operators[i][1]));
list.add(new HashMap<>(list.get(j)));
// System.out.println("换位前::"+Arrays.toString(list.toArray()));
list.remove(j);
// System.out.println("换位后::"+Arrays.toString(list.toArray()));
break;
}
else{
continue;
}
}
if(arrayList.size()==size)
arrayList.add(-1);
// System.out.println(Arrays.toString(arrayList.toArray()));
//
}
// System.out.println(Arrays.toString(list.toArray()));
}
int[] res=new int[arrayList.size()];
for(int d=0;d<arrayList.size();d++){
res[d]=arrayList.get(d);
}
return res;
}
} 
京公网安备 11010502036488号