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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机取证是指通过收集、分析和保护数码证据来揭示计算机和网络犯罪活动的过程。而MRU分析工具是一种计算机取证工具之一,即Most Recently Used(最近使用)分析工具。 MRU分析工具可以用于从计算机中提取重要的数码证据。在Windows操作系统中,MRU是指最近使用的文件、程序或操作。MRU分析工具通过查找计算机中的MRU列表,可以推断用户最近使用的文件或程序。 MRU分析工具可用于以下情境: 1. 法律诉讼:当涉及到计算机和网络犯罪案件时,调查人员可以使用MRU分析工具来找到最近使用过的文件或程序,以提供证据支持。 2. 内部调查:企业可以使用MRU分析工具来检查员工的计算机使用情况,了解他们的活动并确保他们不触犯公司政策或法律。 3. 数据恢复:当用户无意删除文件或程序时,MRU分析工具可以帮助恢复这些可恢复的最近使用过的文件。 使用MRU分析工具需要遵循一定的步骤: 1. 收集数字证据:通过合适的取证方法,例如镜像硬盘,收集计算机中的数字证据。 2. 分离MRU列表:使用取证工具或脚本从计算机中提取出MRU列表。 3. 分析列表:对提取的MRU列表进行分析,查找其中的关键信息,如文件路径、文件名、访问时间等。 4. 确认证据:根据分析结果,确定是否有相关证据能够支持调查或诉讼的需要。 通过使用MRU分析工具,调查人员可以更快地找到和分析最近的计算机活动,从而揭示犯罪或不当行为的证据。然而,需要强调的是,在进行计算机取证过程中必须遵循法律和取证规范,以确保所获得的证据在法庭上的有效性和可接受性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值