题解 | #设计LRU缓存结构#
设计LRU缓存结构
http://www.nowcoder.com/practice/e3769a5f49894d49b871c09cadd13a61
LRU缓存结构 javascript
/** * lru design * @param operators int整型二维数组 the ops * @param k int整型 the k * @return int整型一维数组 */ function LRU( operators , k ) { var map = new Map(); var temp; var result = []; for(let i = 0; i < operators.length; i++){ if(operators[i][0] === 1){ // map中已经存在该key,说明其对应value需要更新 if(map.has(operators[i][1])){ map.delete(operators[i][1]); }else{ //map已满,需要找到最久未访问的删除后,再添加新键值对 if(map.size==k){ const iterator = map.entries(); map.delete(iterator.next().value[0]); } } map.set(operators[i][1], operators[i][2]); }else{ if(map.has(operators[i][1])){ //如果map中有需要查询的key,先保存其值再删除然后添加,可保证这次访问后该键值对为最新插入,不会在删除时误删 temp = map.get(operators[i][1]); map.delete(operators[i][1]); map.set(operators[i][1], temp) result.push(temp); }else{ result.push(-1); } } } return result; } module.exports = { LRU : LRU };