1756 设计最近使用(MRU)队列
题目描述:
设计一种类似队列的数据结构,该数据结构将最近使用的元素移到队列尾部。
实现 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)队列相关推荐
- LeetCode实战:设计循环双端队列
题目英文 Design your implementation of the circular double-ended queue (deque). Your implementation shou ...
- LeetCode 641. 设计循环双端队列
文章目录 1. 题目信息 2. 解题 1. 题目信息 设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k. insertFront(): ...
- leetcode:641. 设计循环双端队列
641. 设计循环双端队列 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/design-circular-deque/ 设计实现双端队列. 实现 M ...
- 高并发架构系列:如何从0到1设计一个MQ消息队列
消息队列作为系统解耦,流量控制的利器,成为分布式系统核心组件之一. 如果你对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现非常重要. 不仅知其然还要知其所以然,这才是一个优秀的工程师需要具 ...
- leetcode 622. Design Circular Queue | 641. 设计循环双端队列(Java)
题目 https://leetcode.com/problems/design-circular-deque/ 题解 相关问题:leetcode 622. Design Circular Queue ...
- LeetCode 1670. 设计前中后队列(deque)
文章目录 1. 题目 2. 解题 1. 题目 请你设计一个队列,支持在前,中,后三个位置的 push 和 pop 操作. 请你完成 FrontMiddleBack 类: FrontMiddleBack ...
- 【Java】 LeetCode 622. 设计循环队列 (有关实现循环队列的讲解)
题目: 设计你的循环队列实现. 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环.它也被称为"环形缓冲器". 循环队列的一 ...
- 消息队列设计的精髓基本都藏在本文里了
当今市面上有很多主流的消息中间件,如老牌的ActiveMQ.RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify.MetaQ.RocketMQ等.本文不会一一介绍这些消息队列的所有特 ...
- sv队列和动态数组的区别_Go 刷 LeetCode 系列:经典(7) 设计双端队列
设计实现双端队列. 你的实现需要支持以下操作: MyCircularDeque(k):构造函数,双端队列的大小为k.insertFront():将一个元素添加到双端队列头部.如果操作成功返回 true ...
最新文章
- 一站式智能芯片定制技术
- Ubuntu 14.04系统托盘图标问题,skype托盘图标显示
- ZooKeeper Dynamic Reconfiguration (dynamicConfigFile) ZooKeeper动态配置
- web.config总结
- linux安装vim plug, vim-plug 的安装和使用
- Contest Hunter 0103最短Hamilton路径 【状压dp】 By cellur925
- 学会用感情营销是最高的智慧
- QCon2016 上海会议汇总(1) - 前端技术实践
- matlab车流量检测,求解释代码,一段交通车流量检测的代码
- Python线程池简介
- 浏览器安装Axure插件与配置
- 【linux浅谈017】gbd调试常用指令
- 计算机内存读取写入原理是什么
- python鼠标绘图_python 基于opencv 实现一个鼠标绘图小程序
- Office激活了提示非正版!
- 郑州oracle代理,郑州甲骨文(Oracle)培训OCM直通车
- python3 ACM模式的输入输出例子教学
- 北京大学数据结构与算法视频下载
- 【Tools】WinEdt编译错误 Error Launching Console Application XeLaTeX ...系统找不到指定的文件。
- go圣经笔记——程序结构