You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
本题主要是要解决 put 时如果容量满了,要删除最少使用的缓存 这个问题,因此只要在 put 的时候能知道最少使用的缓存是哪个就行。
解1
使用哈希 Map + 双向链表
/** * @param {number} capacity */varLRUCache=function(capacity){this.capacity=capacitythis.map=newMap()// 指向排名开头的指针this.pStart=null// 指向排名结尾的指针this.pEnd=null};/** * @param {number} key * @return {number} */LRUCache.prototype.get=function(key){constresult=this.map.get(key)// 找不到则返回 -1if(!result)return-1// 如果 get 的是末尾,则不操作if(this.pEnd!==result){if(result.prev){// 如果 get 的不是开头// 上一个链表元素的 next 指向 get 的 nextresult.prev.next=result.next// 下一个链表元素的 prev 指向 get 的 prevresult.next.prev=result.prev}else{// 如果 get 的是开头,则重新赋值 pStartthis.pStart=result.nextthis.pStart.prev=null}// get 的元素放到链表末尾result.next=nullthis.pEnd.next=resultresult.prev=this.pEndthis.pEnd=result}returnresult.value};/** * @param {number} key * @param {number} value * @return {void} */LRUCache.prototype.put=function(key,value){if(!this.map.has(key)){if(this.map.size===this.capacity){// 容量达到上限,先删除最近最少使用的缓存,直接把 pStart 指向的链表元素删除this.map.delete(this.pStart.key)this.pStart=this.pStart.nextif(this.pStart){this.pStart.prev=null}}// put 操作插入的 rank 一定是最高的,因此 next 指向空constelement={
key,
value,prev: this.pEnd,next: null,}if(this.map.size===0){this.pStart=element}else{this.pEnd.next=element}this.pEnd=elementthis.map.set(key,element)}else{this.map.get(key).value=valuethis.get(key)}};/** * Your LRUCache object will be instantiated and called as such: * var obj = new LRUCache(capacity) * var param_1 = obj.get(key) * obj.put(key,value) */
题目
LeetCode 146
思路
本题主要是要解决
put 时如果容量满了,要删除最少使用的缓存
这个问题,因此只要在put
的时候能知道最少使用的缓存是哪个就行。解1
使用哈希 Map + 双向链表
解2
利用 JavaScript
Map
中的keys()
等遍历方法的遍历顺序是插入顺序这个特性,每次get
时,如果存在 key ,则先在Map
里删除这个 key ,再插入这个 key ,插入的 key 就是迭代器遍历的最后一个元素。在
put
时,通过map.keys().next()
即可获取第一个插入的元素The text was updated successfully, but these errors were encountered: