题解 | 设计LRU缓存结构

设计LRU缓存结构

https://www.nowcoder.com/practice/5dfded165916435d9defb053c63f1e84

import java.util.*;


public class Solution {
    int capacity;
    int size;
    int[] keys;
    HashMap<Integer, Integer> map = new HashMap<>();
    public Solution(int capacity) {
        // write code here
        this.capacity = capacity;
        keys = new int[capacity + 1];
        size = 0;
    }
    public int get(int key) {
        if (size < 1) {
            return -1;
        }

        int res = -1;
        if (map.containsKey(key)) {
            //1.把res值设为value; 2.把keys数组中的key移到末尾
            res = map.get(key);
            toTail(key);
        }
        return res;
    }
    public void set(int key, int value) {
        //1.查找map中是否有key
        if (map.containsKey(key)) {
            //2.如果存在,就更新map和keys数组
            map.put(key, value);
            toTail(key);

        } else {
            //3.如果不存在key,就先判断size是否满了,满了就删除map中的key,弹出keys[0],更新keys[size-1],再map.put();
            if (size >= capacity) {
                map.remove(keys[0]);
                for (int i = 0; i < size - 1; i++) {
                    keys[i] = keys[i + 1];
                }
                keys[size - 1] = key;
                map.put(key, value);
            } else {
                //没满就map.put(),然后size++,keys[size-1] = key
                map.put(key, value);
                keys[size] = key;
                size++;
            }

        }
    }
    private void toTail(int key) {
        //1.找到key对应的数组下标i; 2.把i之后的数据往前移动;3.数组末尾size-1置为key
        int index = -1;
        for (int i = 0 ; i < size; i++) {
            if (keys[i] == key) {
                index = i;
                break;
            }
        }
        for (int i = index; i < size - 1; i++) {
            keys[i] = keys[i + 1];
        }
        keys[size - 1] = key;
    }
}

/**
 * Your Solution object will be instantiated and called as such:
 * Solution solution = new Solution(capacity);
 * int output = solution.get(key);
 * solution.set(key,value);
 */

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务