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的主要内容,如果未能解决你的问题,请参考以下文章