双端队列 码蹄集

news2025/1/18 11:47:20

题目来源:码蹄集

题目描述:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意分析:

这道题目需要使用到双端队列的数据结构。我们可以借助 STL 中的 deque 来实现这个数据结构。具体来说,我们可以通过 deque 的 push_front 和 push_back 操作在队列的头部和尾部添加元素;通过 front 和 back 操作访问队列的头部和尾部元素;通过 pop_front 和 pop_back 操作删除队列的头部和尾部元素。

具体地,对于每个操作,我们可以按照题意依次执行相应的操作即可:

  1. 将整数 x 添加到队列的头部,可以使用 deque 的 push_front 操作。

  2. 将整数 x 添加到队列的尾部,可以使用 deque 的 push_back 操作。

  3. 访问队列的头部元素,可以使用 deque 的 front 操作。

  4. 访问队列的尾部元素,可以使用 deque 的 back 操作。

  5. 删除队列的头部元素,可以使用 deque 的 pop_front 操作。

  6. 删除队列的尾部元素,可以使用 deque 的 pop_back 操作。

最后,对于每个操作 3 和 4,我们需要输出一行表示答案的整数。

C++代码实现:

原文参考链接:https://betheme.net/dashuju/49396.html?action=onClick

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, op, x, length;
    deque<int> ideq;
    cin >> n;

    while (n--) {
        scanf("%d", &op);

        if (op == 1) {
            scanf("%d", &x);
            ideq.push_front(x);
        } else if (op == 2) {
            scanf("%d", &x);
            ideq.push_back(x);
        } else if (op == 3) {
            printf("%d\n", ideq.front());
        } else if (op == 4) {
            length = ideq.size();
            printf("%d\n", ideq.back());
        } else if (op == 5) {
            ideq.pop_front();
        } else {
            ideq.pop_back();
        }
    }

    return 0;
}

Python代码实现(会超时):

from collections import deque

n = int(input())
ideq = deque()

for i in range(n):
    op = list(map(int, input().split()))

    if op[0] == 1:
        ideq.appendleft(op[1])
    elif op[0] == 2:
        ideq.append(op[1])
    elif op[0] == 3:
        print(ideq[0])
    elif op[0] == 4:
        print(ideq[-1])
    elif op[0] == 5:
        ideq.popleft()
    else:
        ideq.pop()


Python代码实现(改进):

from collections import deque
import sys

n = int(sys.stdin.readline())
ideq = deque()

for i in range(n):
    op = list(map(int, sys.stdin.readline().split()))

    if op[0] == 1:
        ideq.appendleft(op[1])
    elif op[0] == 2:
        ideq.append(op[1])
    elif op[0] == 3:
        if len(ideq) > 0:
            print(ideq[0])
        else:
            print("error")
    elif op[0] == 4:
        if len(ideq) > 0:
            print(ideq[-1])
        else:
            print("error")
    elif op[0] == 5:
        if len(ideq) > 0:
            ideq.popleft()
    else:
        if len(ideq) > 0:
            ideq.pop()


Java代码实现(会超时):

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        Deque<Integer> ideq = new LinkedList<>();

        for (int i = 0; i < n; i++) {
            int op = scan.nextInt();

            if (op == 1) {
                int x = scan.nextInt();
                ideq.offerFirst(x);
            } else if (op == 2) {
                int x = scan.nextInt();
                ideq.offerLast(x);
            } else if (op == 3) {
                System.out.println(ideq.peekFirst());
            } else if (op == 4) {
                System.out.println(ideq.peekLast());
            } else if (op == 5) {
                ideq.pollFirst();
            } else {
                ideq.pollLast();
            }
        }
    }
}

Java代码实现(改进):

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());
        Deque<Integer> ideq = new LinkedList<>();

        for (int i = 0; i < n; i++) {
            String[] line = reader.readLine().split(" ");
            int op = Integer.parseInt(line[0]);

            if (op == 1) {
                int x = Integer.parseInt(line[1]);
                ideq.offerFirst(x);
            } else if (op == 2) {
                int x = Integer.parseInt(line[1]);
                ideq.offerLast(x);
            } else if (op == 3) {
                if (!ideq.isEmpty()) {
                    System.out.println(ideq.peekFirst());
                } else {
                    System.out.println("error");
                }
            } else if (op == 4) {
                if (!ideq.isEmpty()) {
                    System.out.println(ideq.peekLast());
                } else {
                    System.out.println("error");
                }
            } else if (op == 5) {
                if (!ideq.isEmpty()) {
                    ideq.pollFirst();
                }
            } else {
                if (!ideq.isEmpty()) {
                    ideq.pollLast();
                }
            }
        }
    }
}

代码提交测试结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/415077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

地球系统模式(CESM)实践技术应用

目前通用地球系统模式&#xff08;Community Earth System Model&#xff0c;CESM&#xff09;在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。于2010年07月推出以来&#xff0c;一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海洋、海冰、陆冰…

图形库EasyX的学习:)

最近学了一点做小游戏的基本知识&#xff0c;来总结一下&#xff0c;巩固一下记忆&#xff1a; 在这个基础上初学者要先明白vs的下载及基本使用还有图形库的下载及安装&#xff1b; 然后才是正题&#xff1a; 图形库里包含c语法&#xff0c;所以要用c文件&#xff0c;但是除…

Ubantu docker学习笔记(六)容器数据卷——补充实验

文章目录一、volume container二、 data-packed volume container三、利用数据卷驱动共享数据注意要在同一个网络配置下&#xff01;3.1服务端3.2客户端一、volume container 这里我觉得很好理解&#xff0c;volume container是专门为其他容器提供volume的容器。其实也就相当于…

深圳海运到墨西哥需要多长时间

目前&#xff0c;墨西哥的跨境电商商业正在高速发展&#xff0c;并且具有可观的红利。因此&#xff0c;从中国到墨西哥的运输需求很大&#xff0c;特别是海运&#xff0c;是很多跨境电商卖家主要选择的运输方式。 一般而言&#xff0c;中国到墨西哥的跨境卖家们普遍关注海运所需…

“终于我从字节离职了...“一个年薪40W的测试工程师的自白...

”我递上了我的辞职信&#xff0c;不是因为公司给的不多&#xff0c;也不是因为公司待我不好&#xff0c;但是我觉得&#xff0c;我每天看中我憔悴的面容&#xff0c;每天晚上拖着疲惫的身体躺在床上&#xff0c;我都不知道人生的意义&#xff0c;是赚钱吗&#xff1f;是为了更…

【云原生进阶之容器】第五章容器运行时5.8--容器热迁移

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

MySQL-存储过程

什么是存储过程我们前面所学习的MySQL语句都是针对一个表或几个表的单条 SQL 语句&#xff0c;但是在数据库的实际操作中&#xff0c;并非所有操作都那么简单&#xff0c;经常会有一个完整的操作需要多条SQL语句处理多个表才能完成。例如&#xff0c;为了确认学生能否毕业&…

015 - C++ 类与结构体对比

今天这期我们主要解决一个问题&#xff0c;就是 C 中的类和结构体有什么区别。 上一期我们讲类的时候&#xff0c; 我们对类有了一些基本的介绍&#xff0c;在本期的学习开始之前你可以先看看那一期。 本期我们有两个术语&#xff0c;结构体 struct&#xff0c;它是 structur…

【终结扩散模型】Consistency Models.OpenAI开源新模型代码,一步成图,1秒18张

【终结扩散模型】Consistency Models.OpenAI开源新模型代码&#xff0c;一步成图&#xff0c;1秒18张0、前言Abstract1. Introduction2. Diffusion Models3. Consistency Models3.1 Definition3.2 Parameterization3.3 Sampling3.4 Zero-Shot Data Editing4. Training Consiste…

MySQL运维13-数据库性能测试

文章目录1、数据库性能指标1.1、事务吞吐率1.2、响应时间2、数据库性能测试的目的3、数据库性能测试的注意事项4、数据库性能测试工具选型4.1、sysbench4.2、mysqlslap5、sysbench测试介绍5.1、sysbench的安装5.1.1、sysbench的正常安装步骤5.1.2、安装中的异常处理5.2、sysben…

数据结构|二叉树的三种遍历方式,你掌握了几种?

目录 1、遍历方式 2、前序遍历 3、中序遍历 1、遍历方式 学习二叉树的结构&#xff0c;最简单的方式就是遍历二叉树。遍历二叉树就是通过某条线路对二叉树的各个结点进行一次访问&#xff0c;访问的方法有三种分为前序遍历、中序遍历、后续遍历&#xff0c;层序遍历它们的遍…

TryHackMe-Year of the Fox(Linux渗透测试)

Year of the Fox 你能熬过狡猾的狐狸吗&#xff1f; 端口扫描 循例nmap 有个域名&#xff0c;加入hosts SMB枚举 smbmap enum4linux -a&#xff0c;枚举到两个账户 Web枚举 进80发现需要登录 上hydra RCE to Getshell 进来可以查看一些文件 bp发现这里存在过滤 burpfuzz一…

数据结构---作业1时间复杂度

本专栏是对自我的平时作业错题及掌握知识不牢固的地方的总结专栏. 1.大O是一个渐进表示法&#xff0c;不会去表示精确的次数&#xff0c;cpu的运算速度很快&#xff0c;估计精确的没有意义。 2. 此函数有一个循环&#xff0c;但是循环没有被执行n次&#xff0c;i每次都是2倍进…

再不转型为ChatGPT程序员,有遭受降维打击的危险

Open AI在演示GPT-4的时候&#xff0c;有这么一个场景&#xff1a;给一个界面草图&#xff0c;就可以生成网页代码。这个演示非常简单&#xff0c;如果界面原型比较复杂呢&#xff1f;像这样&#xff1a;ChatGPT能不能直接生成HTML, CSS,JavaScript代码&#xff0c;把这个网页给…

【MySQL】表的约束

前言 hi~大家好呀&#xff0c;欢迎来到我的MySQL学习笔记系列~ 继上次数据类型的描述&#xff0c;这篇笔记重点记录DDL-数据定义语言对表的结构中的其他约束条件进行说明&#xff0c;以便让关系型数据库真正的保持完整性。 我的上一篇MySQL笔记~ 【MySQL】表的操作和数据类型_柒…

OpenCV实战之人脸美颜美型(七)——美颜demo

前言 之前我们已经完成了人脸检测、肤色检测、磨皮、美白功能,这一篇文章中我们将尝试利用OpenCV中的滑动条对象,结合窗口制作一个简单的demo。demo中会将上述功能集成进来,并通过滑动条来调整美白、磨皮力度观察其效果,先放一张效果图如下。 滑动条 OpenCV中可通过crea…

【Fluent】Run can not be started until validation issues are resolved.

一、问题背景 因为在fluent中用Discard Data, Replace Mesh选项替换了网格&#xff0c;但是没有抛弃算例设置等参数。 当时我以为网格是完全一样的&#xff0c;便忽略了产生冲突/错误的可能。 之后在calculate的时候&#xff0c;报错&#xff1a;Run can not be started unt…

联盟链是虚构的?没有用的?用FISCO BCOS来展示链委员这件事

前言 当前区块链大都使用的是投票决定这种方法&#xff0c;但是如何使现实中的投票转换到区块链中&#xff0c;如何让举手表决变得更加智能&#xff0c;如何让投票透明、安全、权威&#xff0c;这是区块链的一大设计思路&#xff0c;有很多人觉得联盟链是个梦&#xff0c;是个虚…

分享一个国内可用的免费ChatGPT网站

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 作为一个程序员&#xff0c;我也忍不住做了一个基于ChatGPT的网站&#xff0c;免费&#xff01;免登陆&#xff01;&#xff01;国内可直接对话ChatGPT&#xff0c;也…

十年磨一剑,你要的低代码平台在这里

目录低代码平台现状没有创新的“拼凑”&#xff0c;没有好东西ivx平台是什么ivx与其他平台的区别产品思路不同用户不同学习价值不同应用范围不同有无框架限制总结低代码开发平台已成为企业数字化转型和应用程序开发的重要工具。它们提供了一种快速创建和部署应用程序的方法&…