首页 > 其他分享 >huawei0821笔试第二题笔记:双端队列deque

huawei0821笔试第二题笔记:双端队列deque

时间:2024-08-29 23:48:37浏览次数:11  
标签:deque tasks 队列 双端 huawei0821 front machines

int solve(deque<int> machines, const vector<int>& tasks){
    for(int task : tasks){
        int cnt = 0;
        //首件不匹配
        while(cnt < machines.size() && task != machines.front()){
            machines.push_back(machines.front());
            machines.pop_front();
            cnt++;
        }
        //首件与所有的执行机不匹配,比首件匹配先进行判断,因为tasks中不会删除
        if(cnt >= machines.size()){
            break;
        }
        //首件匹配
        if(task == machines.front()){
            machines.pop_front();
        }
    }
    return machines.size();
}

注意参数列表,两个参数的数据类型

1.参数列表

函数接受两个参数:

  • deque<int> machines:

    • 这是一个传值参数,它是一个 deque(双端队列)容器,存储了 int 类型的元素。
    • deque<int> 允许在队列的两端高效地插入和删除元素。这个参数是按值传递的,因此函数会得到 machines 的一个拷贝,而不是对原来的 deque 进行修改。
  • const vector<int>& tasks:

    • 这是一个常量引用参数,类型为 vector<int>,即 tasks 是一个存储 int 类型元素的 vector 容器。
    • const 关键字表示函数不能修改 tasks 的内容,保证其只读性。
    • & 表示按引用传递,这意味着 tasks 是按引用传递的,因此在函数内部不会复制整个 vector,而是使用它的原始引用。这种方式效率较高,特别是在传递大型容器时。

2.for循环中break到底是跳出一次循环还是全部循环

在 C++ 中,for 循环内的 break 语句用于立即终止循环的执行,并跳出循环体。无论循环条件是否仍为真,一旦遇到 break 语句,循环就会停止,并且程序将继续执行循环之后的语句。

3.双端队列

双端队列(Deque,Double-Ended Queue) 是一种抽象数据结构,它允许在队列的两端进行插入和删除操作。与普通队列(只能在一端进行插入,另一端进行删除)不同,双端队列允许在两端都进行插入和删除操作,因此它既可以用作栈(LIFO)也可以用作队列(FIFO)。

双端队列的特点

  1. 双端操作: 可以在队列的前端和后端进行插入和删除操作。
  2. 动态大小: 可以根据需要动态调整大小。
  3. 灵活性: 既可以用作队列(先进先出,FIFO),也可以用作栈(后进先出,LIFO)。

双端队列的常见操作

在双端队列中,常见的操作包括:

  • push_front(item): 在队列的前端插入一个元素。
  • push_back(item): 在队列的后端插入一个元素。
  • pop_front(): 移除并返回队列的前端元素。
  • pop_back(): 移除并返回队列的后端元素。
  • front(): 返回队列的前端元素(不移除)。
  • back(): 返回队列的后端元素(不移除)。
  • empty(): 检查队列是否为空。
  • size(): 返回队列中的元素数量。

C++ 中的双端队列

在 C++ 标准模板库(STL)中,std::deque 是用于表示双端队列的容器。std::deque 提供了 O(1) 时间复杂度的双端插入和删除操作。

双端队列(Deque)是一种灵活的线性数据结构,支持高效的双端插入和删除操作。它结合了栈和队列的优点,适合在需要从两端进行操作的场景下使用。std::deque 是 C++ 标准库中提供的双端队列实现,使用简单且高效。

双端队列的应用场景

  1. 滑动窗口问题: 在算法中,双端队列可以用来高效地解决滑动窗口问题,例如求滑动窗口的最大值或最小值。
  2. 调度系统: 可以用来实现需要从两端操作的任务调度系统。
  3. 缓存系统: 使用双端队列来实现最近最少使用(LRU)缓存。
  4. 浏览器历史记录: 可以用双端队列来实现浏览器的前进和后退操作。

标签:deque,tasks,队列,双端,huawei0821,front,machines
From: https://www.cnblogs.com/spp20/p/18387733

相关文章

  • 数据结构(C)---双端队列(Deque)
    在使用本博客提供的学习笔记及相关内容时,请注意以下免责声明:信息准确性:本博客的内容是基于作者的个人理解和经验,尽力确保信息的准确性和时效性,但不保证所有信息都完全正确或最新。非专业建议:博客中的内容仅供参考,不能替代专业人士的意见和建议。在做出任何重要决定之前,请咨询相......
  • bfs+双端队列
    算法介绍\(bfs+\)双端队列是一种单源最短路算法,适用于边权为\(0\)或\(1\)的图中。时间复杂度为\(O(n)\)。算法原理分析算法的整体框架与普通\(bfs\)求最短路类似,只是根据边权做了分类讨论,如果边权为\(1\),则将邻居节点压到队列尾部,反之,压到队列首部。当每个节点第一次出......
  • deque容器的所有操作
     1.deque原理2.deque构造函数只读迭代器这么写:3.deque赋值操作 4.deque大小操作5.deque插入和删除操作 6.deque数据存取 7.deque排序......
  • ArrayDeque源码解读
    ArrayDequeArrayDeque和LinkedList是Deque的两个通用实现,在使用Queue时,由于Queue只是一个接口,因此创建Queue时也会使用ArrayDeque为了实现在数组两端进行操作元素的需求,因此ArrayDeque使用循环数组作为底层数据结构,同时,ArrayDeque中定义了head和tail两个指针指向头和尾因为是循......
  • deque
    dequedeque<T>,一个定义在deque头文件中的容器模板,可以生成包含T类型元素的容器,它以双端队列的形式组织元素。可以在容器的头部和尾部高效地添加或删除对象,这是它相对于vector容器的优势。创建#include<algorithm>#include<string>#include<deque>usingnamespace......
  • 20240815有名管道双端线程通信
    //端1#include<stdio.h>#include<stdlib.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<string.h>#include<pthread.h>#include<errno.h>#include<......
  • 双端口RAM与多模块处理器
    多模块处理器多模块存储器是一种空间并行技术,利用多个结构完全相同的存储模块的并行工作来提高存储器的吞吐率。常用的有单体多字存储器和多体低位交叉存储器。CPU的速度比存储器快得多,若同时从存储器中取出n条指令,就可以充分利用CPU资源,提高运行速度。多体交叉存储器就是......
  • 五级分销版蝶影全网VIP影视 APP源码 安卓+苹果iOS双端+搭建教程
    ###五级分销版蝶影全网VIP影视APP源码安卓+苹果iOS双端+搭建教程在数字娱乐的浪潮中,影视APP成为了人们生活中不可或缺的一部分。随着技术的不断进步,定制化的影视APP源码成为了市场上的新宠。本文将详细介绍一款名为“蝶影”的全网VIP影视APP源码,它支持五级分销模式,并提供......
  • JAVA中实现队列和栈(Deque接口和ArrayDeque类)
    用什么来实现队列和栈首先JAVA中有一个Queue接口,用来实现队列。Deque其实就是双端队列,代表两端都可进可出的队列。ArrayDeque就是用数组来实现这个双端队列。(Deque由于是接口,只可以用于声明对象,但是没办法实例化,实例化还是要使用ArrayDeque类)这时可能就会产生疑惑,队列有了,......
  • STL用法总结(二)(deque,map,set)
    4.deque(双端队列)1.介绍首尾都可插入和删除的队列为双端队列#include<deque>//初始化定义deque<int>dq;2.方法函数代码含义q.push_back(x)/pusu_front(x)把x插入队尾/队首q.back()/front()返回队尾/队首元素q.pop_back()/pop_front()删除队尾/队首元素q.erase(ite......