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

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. 浏览器历史记录: 可以用双端队列来实现浏览器的前进和后退操作。
posted @ 2024-08-29 23:42  axuu  阅读(7)  评论(0编辑  收藏  举报