题目描述:
设计一种类似队列的数据结构,该数据结构将最近使用的元素移到队列尾部。
实现 MRUQueue 类:
MRUQueue(int n) 使用 n 个元素: [1,2,3,…,n] 构造 MRUQueue 。
fetch(int k) 将第 k 个元素(从 1 开始索引)移到队尾,并返回该元素。

示例 1:
输入:
[“MRUQueue”, “fetch”, “fetch”, “fetch”, “fetch”]
[[8], [3], [5], [2], [8]]
输出:
[null, 3, 6, 2, 2]
解释:
MRUQueue mRUQueue = new MRUQueue(8); // 初始化队列为 [1,2,3,4,5,6,7,8]。
mRUQueue.fetch(3); // 将第 3 个元素 (3) 移到队尾,使队列变为 [1,2,4,5,6,7,8,3] 并返回该元素。
mRUQueue.fetch(5); // 将第 5 个元素 (6) 移到队尾,使队列变为 [1,2,4,5,7,8,3,6] 并返回该元素。
mRUQueue.fetch(2); // 将第 2 个元素 (2) 移到队尾,使队列变为 [1,4,5,7,8,3,6,2] 并返回该元素。
mRUQueue.fetch(8); // 第 8 个元素 (2) 已经在队列尾部了,所以直接返回该元素即可。

提示:
1 <= n <= 2000
1 <= k <= n
最多调用 2000 次 fetch

**进阶:**找到每次 fetch 的复杂度为 O(n) 的算法比较简单。你可以找到每次 fetch 的复杂度更佳的算法吗?

方法1:
主要思路:解题链接汇总
(1)直接使用数组模拟过程。

class MRUQueue {public:vector<int> nums;MRUQueue(int n) {nums=vector<int>(n);for(int i=0;i<n;++i){nums[i]=i+1;}}int fetch(int k) {int res=nums[k-1];for(int i=k;i<nums.size();++i){swap(nums[i-1],nums[i]);}return res;}
};/*** Your MRUQueue object will be instantiated and called as such:* MRUQueue* obj = new MRUQueue(n);* int param_1 = obj->fetch(k);*/

//go实现

type MRUQueue struct {nums []int
}func Constructor(n int) MRUQueue {var res MRUQueueres.nums = make([]int,n)for i:=0;i<n;i++{res.nums[i]=i+1}return res
}func (this *MRUQueue) Fetch(k int) int {res := this.nums[k-1];for i:=k;i<len(this.nums);i++{this.nums[i-1],this.nums[i]=this.nums[i],this.nums[i-1]}return res
}/*** Your MRUQueue object will be instantiated and called as such:* obj := Constructor(n);* param_1 := obj.Fetch(k);*/

方法2:
主要思路:
(1)使用链表模拟过程

struct Node{int val;Node*next;Node(int v):val(v){}
};
class MRUQueue {public:Node*head;Node*tail;MRUQueue(int n) {head=new Node(1);Node* cur=head;for(int i=2;i<=n;++i){cur->next=new Node(i);cur=cur->next;}tail=cur;}int fetch(int k) {if(head==tail){return 1;}if(k==1){tail->next=head;head=head->next;tail=tail->next;tail->next=NULL;return tail->val;}Node*cur=head;for(int i=2;i<k;++i){cur=cur->next;}if(cur->next==tail){return tail->val;}tail->next=cur->next;cur->next=cur->next->next;tail=tail->next;tail->next=NULL;return tail->val;}
};/*** Your MRUQueue object will be instantiated and called as such:* MRUQueue* obj = new MRUQueue(n);* int param_1 = obj->fetch(k);*/

1756 设计最近使用(MRU)队列相关推荐

  1. LeetCode实战:设计循环双端队列

    题目英文 Design your implementation of the circular double-ended queue (deque). Your implementation shou ...

  2. LeetCode 641. 设计循环双端队列

    文章目录 1. 题目信息 2. 解题 1. 题目信息 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront(): ...

  3. leetcode:641. 设计循环双端队列

    641. 设计循环双端队列 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/design-circular-deque/ 设计实现双端队列. 实现 M ...

  4. 高并发架构系列:如何从0到1设计一个MQ消息队列

    消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...

  5. leetcode 622. Design Circular Queue | 641. 设计循环双端队列(Java)

    题目 https://leetcode.com/problems/design-circular-deque/ 题解 相关问题:leetcode 622. Design Circular Queue ...

  6. LeetCode 1670. 设计前中后队列(deque)

    文章目录 1. 题目 2. 解题 1. 题目 请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作. 请你完成 FrontMiddleBack 类: FrontMiddleBack ...

  7. 【Java】 LeetCode 622. 设计循环队列 (有关实现循环队列的讲解)

    题目: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列的一 ...

  8. 消息队列设计的精髓基本都藏在本文里了

    当今市面上有很多主流的消息中间件,如老牌的ActiveMQ.RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify.MetaQ.RocketMQ等.本文不会一一介绍这些消息队列的所有特 ...

  9. sv队列和动态数组的区别_Go 刷 LeetCode 系列:经典(7) 设计双端队列

    设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k.insertFront():将一个元素添加到双端队列头部.如果操作成功返回 true ...

最新文章

  1. 一站式智能芯片定制技术
  2. Ubuntu 14.04系统托盘图标问题,skype托盘图标显示
  3. ZooKeeper Dynamic Reconfiguration (dynamicConfigFile) ZooKeeper动态配置
  4. web.config总结
  5. linux安装vim plug, vim-plug 的安装和使用
  6. Contest Hunter 0103最短Hamilton路径 【状压dp】 By cellur925
  7. 学会用感情营销是最高的智慧
  8. QCon2016 上海会议汇总(1) - 前端技术实践
  9. matlab车流量检测,求解释代码,一段交通车流量检测的代码
  10. Python线程池简介
  11. 浏览器安装Axure插件与配置
  12. 【linux浅谈017】gbd调试常用指令
  13. 计算机内存读取写入原理是什么
  14. python鼠标绘图_python 基于opencv 实现一个鼠标绘图小程序
  15. Office激活了提示非正版!
  16. 郑州oracle代理,郑州甲骨文(Oracle)培训OCM直通车
  17. python3 ACM模式的输入输出例子教学
  18. 北京大学数据结构与算法视频下载
  19. 【Tools】WinEdt编译错误 Error Launching Console Application XeLaTeX ...系统找不到指定的文件。
  20. go圣经笔记——程序结构

热门文章

  1. 入手评测 联想YOGA 5G怎么样
  2. [CTF]pwnable.kr fd Wp
  3. 架构师花费近一年时间整理出来的Java核心知识,直击优秀开源框架灵魂
  4. freemark数值如何保留两位小数的同时,使用进一法
  5. 未能猜测出图片名称??告诉你一个100%有用的搜图神器!
  6. 在Excel表格中打字为何会被覆盖掉
  7. Android开商品属性筛选与商品筛选
  8. 一些日文处理的正则表达式(Perl)
  9. 关于软件和软件工程师
  10. NCE开放可编程培训交流