思路:
用一个map实现get和set的功能
用一个LinkedList<string> array实现最少访问节点删除的功能,根据题目只要求最常访问和最少访问,因此根据访问顺序将节点插入到LinkedList中,list越靠前为越少访问的。
用一个ArrayList<integer> ret实现保存get()的结果,由于需要返回int[]数组,需要进行ArrayList<integer>到int[]的转换</integer></integer></string>
ret.stream().mapToInt(Integer::valueOf).toArray();
整体逻辑: 如果是插入操作: 判断array.size()是否小于k, 如果小于k, 将键插入到array中, 否则 从array中删除第一个元素,将键插入到array中,map中调用set方法存放键值对 如果是查询操作: 从map中获取数据,如果为空,ret.add(-1),否则ret.add(data),并更新array 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) { // write code here Map<String,Integer>map=new HashMap<>(); LinkedList<String> array=new LinkedList(); ArrayList<Integer> ret=new ArrayList(); for(int i=0;i<operators.length;i++){ // set数据 // System.out.println("operators[i][0]"+operators[i][0]); if(operators[i][0]==1){ // 添加数据 // 没有数据 // if(map.get(String.valueOf(operators[i][1]))==null){ if(array.size()<k){ array.add(String.valueOf(operators[i][1])); }else{ map.remove(array.get(0)); array.removeFirst(); array.addLast(String.valueOf(operators[i][1])); } map.put(String.valueOf(operators[i][1]),operators[i][2]); // read数据 }else{ Integer data=map.get(String.valueOf(operators[i][1])); if(data==null){ ret.add(-1); continue; } // 获取当前访问的索引 int index=array.indexOf(String.valueOf(operators[i][1])); // 更新访问的列表 String readnow=array.get(index); array.remove(index); array.addLast(readnow); // 添加数据到返回列表 ret.add(data); } } return ret.stream().mapToInt(Integer::valueOf).toArray(); } }