leetcode刷题15

Posted cquer-xjtuer-lys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
    

 

以上是关于leetcode刷题15的主要内容,如果未能解决你的问题,请参考以下文章

leetcode刷题15

LeetCode刷题day15

leetcode刷题15.汉明距离——Java版

LeetCode-Easy刷题(15) Sqrt(x)

LeetCode刷题15-简单-三数之和

LeetCode刷题15-简单-三数之和