当前位置: 首页 > Web前端 > JavaScript

第6-100天JavaScript算法-LRU缓存机制

时间:2023-03-26 23:27:43 JavaScript

1.Topic利用掌握的数据结构设计并实现LRU(leastrecentlyused)缓存机制。实现LRUCache类:LRUCache(intcapacity)使用正整数作为容量初始化LRU缓存intget(intkey)如果缓存中存在key,则返回key的值,否则返回-1。voidput(intkey,intvalue)如果关键字已经存在,改变它的数据值;如果关键字不存在,则插入“keyword-value”的集合。当缓存容量达到上限时,它应该在写入新数据之前删除最旧的未使用数据值,从而为新数据值腾出空间。2.思路与实践首先想到的是用数组(最熟悉的)来模拟队列,但是最后一个用例失败了,栈爆了。后来参考题解,发现有一个Map。获取最新数据排列keys().next().value的方法参考思路。我自己实现了。它很容易使用。记录错误方法后,花了两个小时做不确定,分析思路和解决问题还是很重要的;3、实现代码如下:/***@param{number}capacity*/varLRUCache=function(capacity){this.cache=newMap()this.capacity=capacity};/***@param{number}键*@return{number}*/LRUCache.prototype.get=function(key){letres=-1if(this.cache.has(key)){res=this.cache.get(key)this.cache.delete(key)this.cache.set(key,res)}returnres};/***@param{number}key*@param{number}value*@return{void}*/LRUCache.prototype.put=function(key,value){if(this.cache.has(key)){this.cache.delete(key)this.cache.set(key,value)}else{//判断上限ofcapacityif(this.cache.size==this.capacity){//按照加法顺序获取key值constiteratorKey=this.cache.keys();this.cache.delete(iteratorKey.next().value)}this.cache.set(key,value)}};/***你的LRUCache对象将被实例化并这样调用:*varobj=newLRUCache(capacity)*varparam_1=obj.get(key)*obj.put(key,value)*/referencelink