点击量高的网站,免费域名怎么弄,国示范校建设网站,京东官方网上商城https://leetcode.cn/problems/lru-cache/
题目有key、value的#xff0c;直接就上map了 结果#xff1a;#x1f605; 仔细一看#xff0c;原来要 get 和 put 必须 O(1)
只能抛弃树型数据结构了
线性的数据结构也可以吧#xff0c;如果可以构造出一个队列#xff0c…https://leetcode.cn/problems/lru-cache/
题目有key、value的直接就上map了 结果 仔细一看原来要 get 和 put 必须 O(1)
只能抛弃树型数据结构了
线性的数据结构也可以吧如果可以构造出一个队列从前往后放入如果访问把访问的那个拿出来放后面如果满了把最前面的那个踢出去如果更新把更新的那个放最后面
从前往后放入queue如果访问把访问的那个拿出来放后面放后面queue能实现但是找到那个访问的暴力O(n)如果是用map就是O(logn)没到O(1)如果满了把最前面的那个踢出去queue如果更新把更新的那个放最后面跟2一样问题在找不着
能在O(1)找到元素的数据结构是哈希表 哈希表是unordered_map
我自己写这题的时候负优化想着可以在队列中存一些脏数据等到用到的时候再判断这个数据脏不脏。但其实这个判断也是要时间的不如直接维护真实数据 看到题解有人用listlist的话是链式结构插入O(1)删除O(1)查询O(n)刚开始我想删除不用找到对应的那个么这样又O(n)了其实是不用的如果是自己实现的话 void removeNode(DLinkedNode* node) {node-prev-next node-next;node-next-prev node-prev;}这个node是一个指针这个指针是unordered_map给的而不是迭代list找到的那就O(1)