题解 | #设计LRU缓存结构#
设计LRU缓存结构
http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61
方法:将二维数组中的每一项的从下标为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; } }