主题:
介绍LRU (最近使用的)缓存结构的设计。 假设大小为k,则此结构在构建时确定大小,并具有以下两个功能
1 .将1.set(key,value ) :记录) key,value插入此结构
2.get(key ) :返回与key对应的值
提示:
1 .一个key的设置或获取操作发生时,该key的记录被认为是最常用的,缓存会被刷新。
2 .缓存大小超过k时,删除最不常用的记录。
3.输入二维数组和k。 二维数组每个一维有两个或三个数字,第一个数字是opt,第二个,第三个数字是key,value
当opt=1时,以下两个整数key、value表示set(key、value )
如果opt=2,则以下整数key表示get(key ),如果key不出现或删除,则返回-1
每opt=2输出一个回答
代码:
import java.util.*;
公共类解决方案{
//*
* LRU设计
* @param operators int整数二维数组the ops
* @param k int整数型the k
* @return int整数一维数组
*/
公共int [ ] LRU (int [ ] [ ]操作器,int k ) {
//写代码here
arraylistintegerlist=newarraylistinteger (;
LucacheLRU=newLrucache(k;
for (int [ ] opt :操作器) {
if(opt[0]==1) {
LRU.put(opt[1],opt[2];
}else{
list.add(LRU.get(opt[1] );
}
}
int[]RES=newint[list.size(];
int i=0;
for(intval:list ) {
RES[I]=list.get(I;
I;
}
返回RES;
}
}
class LRUCache{
int cap;
LinkedHashMapInteger,integer cache=newlinkedhashmapinteger,integer (;
publiclrucache (信息容量) {
this.cap=capactity;
}
//Key最近开始使用
私有语音密钥中心(intkey ) {
intval=cache.get(key;
删除//Key并将其重新插入团队末尾
cache.remove(key;
che.put (密钥,val );
}
获取//值
公共插入获取(intkey ) {
if (! cache.containskey(key ) }{
返回- 1;
}
//将此密钥更改为最近使用的
makerecncently (密钥;
返回缓存. get (key;
}
//储存数值
公共语音推送(intkey,int val ) {
if(cache.containskey(key ) ) }
che.put (密钥,val );
//最近使用
makerecncently (密钥;
返回;
}
//超过缓存大小
if(cache.size(=this.cap ) {
//得到链表头的密钥
int oldestKey=cache.keySet ().iterator ) (.next );
cache.remove(oldestkey;
}
//将新key插入链表的末尾
che.put (密钥,val );
}
}