LRU缓存结构(算法)
思路:LRU(最近最少使用)当输入arr[][] = [[1,1,1],[1,2,2],[2,1],[1,3,4]]
其中二维数组a[x][0]代表操作,如[1,1,1] : set(1,1);[2,1] : get(1)
public int[] LRU(int [][]arrs, int k){ //保存结果 List<Integer> list = new LinkedList<>(); //保存键值对 Map<Integer,Integer> map = new LinkedHashMap<>(); for(int arr:arrs){ int key = arr[1];//获取键 switch(arr[0]){//根据操作标志进行后续操作 //进行set操作 case 1: int value = arr[2];//获取值 if(map.size()<k){//当存储大小大于设定大小 map.put(key,value);//存入 }else{//否则删除最早没使用的,再进行插入当前数值 Iterator it = map.keySet().iterator(); map.remove(it.next()); map.put(key,value); } break; //进行get操作 case 2: if(map.containsKey(key)){//当在map中存储了对应key int val = map.get(key);//获取对应值 list.add(val);//存入list中 //将该key重新存储入map,相当于放在最前 map.remove(key); map.put(key,val); }else{ list.add(-1);//没对应值返回-1 } break; deafult: } int res[] = new int[list.size()];//返回结果数组 for(int i=0;i<res.length;i++){ res[i] = list.get(i); } return res; } }
浙公网安备 33010602011771号