或许有点简单,有点麻烦。但确实是通关了!


	/**
     * 用两个LinkedList分别表示key和value。
     * 往first的位置插入元素
     * 一旦发生的set和get操作就插入,删除原来有的
     *
     * @param operators
     * @param k
     * @return
     */
    public static int[] LRU(int[][] operators, int k) {
        //用来存放所有的key
        LinkedList<Integer> key = new LinkedList<>();
        //用来存放所有的value
        LinkedList<Integer> value = new LinkedList<>();
        //用来存放被返回的元素
        List<Integer> result = new ArrayList<>();

        for (int[] operator : operators) {
            //进行set操作
            if (operator[0] == 1) {
                //删除原来有的
                if (key.contains(operator[1])) {
                    int i = key.indexOf(operator[1]);
                    value.remove(i);
                    key.remove(i);
                }
                key.addFirst(operator[1]);
                value.addFirst(operator[2]);
                //缓存里面多于k个元素,删除多的
                if (key.size() > k) {
                    key.removeLast();
                    value.removeLast();
                }
            }
            //进行get操作
            else {
                //如果不包含就返回-1
                if (!key.contains(operator[1])) {
                    result.add(-1);
                }
                //如果包含就把值存入result中,并更新缓存
                else {
                    Integer integer1 = value.get(key.indexOf(operator[1]));
                    result.add(integer1);
                    //更新缓存
                    key.remove(value.indexOf(integer1));
                    value.remove(integer1);
                    key.addFirst(operator[1]);
                    value.addFirst(integer1);
                }
            }
        }
        //按需求 设置一个用于返回值的数组
        int[] a = new int[result.size()];
        for (int i = 0; i < result.size(); i++) {
            a[i] = result.get(i);
        }
        return a;
    }