zoukankan      html  css  js  c++  java
  • leetcode刷题15

    今天刷的题是LeetCode第146题,题目要求是实现一个LRU(最近最少使用)缓存机制,并支持获取数据get和写入数据put
      获取数据get(key):如果key存在与缓存中,则获取key对应的值,否则返回-1
      写入数据put(key,value):如果key不存在,则写入数据。当缓存容量达到上限的时候,
    应该在写入新数据之间删除最近最少使用的数据值,从而为新数据值留出空间
    这个题的解法很丰富,可以用数组也可以用链表。我这里采用的是数组的解法,具体地代码如下:
    import java.time.temporal.ValueRange;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class LRUCache_146_middle {
        private int capacity;
        private int count;
        private int[] KEY;
        private int [] VALUE;
        public LRUCache_146_middle(int capacity){
            this.capacity=capacity;
            this.count=0;//记录当前存储的数据个数
            this.KEY=new int[capacity];
            this.VALUE=new int[capacity];
        }
        public int get(int key){
            if (count==0){
                return -1;
            }
            int result=-1;
            for (int i = 0; i <count ; i++) {
                if (KEY[i]==key){
                    result=VALUE[i];
                    VALUE=move(VALUE,count,i);
                    KEY=move(KEY,count,i);
                    break;
                }
            }
            System.out.println(result);
            return result;
        }
        public void put(int key,int value){
            if (containskey(KEY,count,key)[0]==1){
                int index=containskey(KEY,count,key)[1];
                VALUE[index]=value;
                VALUE=move(VALUE,count,index);
                KEY=move(KEY,count,index);
            }else if (count==capacity){
                //保存的数据满了
                for (int i = 0; i <count-1 ; i++) {
                    KEY[i]=KEY[i+1];
                    VALUE[i]=VALUE[i+1];
                }
                KEY[count-1]=key;
                VALUE[count-1]=value;
            } else {
                VALUE[count]=value;
                KEY[count]=key;
                count++;
            }
        }
        public static int[] containskey(int[] KEY,int count,int key){
            int[] result=new int[2];
            for (int i = 0; i <count ; i++) {
                if (KEY[i]==key){
                    result[0]=1;
                    result[1]=i;
                    break;
                }
            }
            return result;
        }
        public static int[] move(int [] nums,int count,int i){
            int temp=nums[i];
            for (int j = i; j <count-1 ; j++) {
                nums[j]=nums[j+1];
            }
            nums[count-1]=temp;
            return nums;
        }
    
        public static void main(String[] args) {
            LRUCache_146_middle lru=new LRUCache_146_middle(2);
            lru.put(2,1);
            lru.put(2,2);
            lru.get(2);
            lru.put(1,1);
            lru.put(4,1);
            lru.get(2);
        }
    }
  • 相关阅读:
    UVA.12096 The SetStack Computer ( 好题 栈 STL混合应用)
    HDOJ(HDU).1412 {A} + {B} (STL SET)
    UVA.10474 Where is the Marble ( 排序 二分查找 )
    HDOJ(HDU).1754 I Hate It (ST 单点替换 区间最大值)
    HDOJ(HDU).1166 敌兵布阵 (ST 单点更新 区间求和)
    17 西安
    17 沈阳
    13 南京
    10/11 作战会议
    2019牛客国庆集训派对day5
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11404012.html
Copyright © 2011-2022 走看看