【题解】 栈和排序(栈 + 预处理 / 贪心)

https://www.nowcoder.com/practice/95cb356556cf430f912e7bdf1bc2ec8f?tpId=196&tqId=37173&ru=/exam/oj
在这里插入图片描述

  1. 预处理最大值
#include <climits> // 包含标准整数类型的定义
#include <vector>  // 包含标准vector容器的定义

class Solution {
  public:
    /**
    * 栈排序算法实现
    * @param a int整型vector 描述入栈顺序
    * @return int整型vector 排序后的栈
    */
    vector<int> solve(vector<int>& a) {
        // 定义栈和右端点的最大值数组
        int n = a.size(); // 栈的大小
        stack<int> st;    // 定义一个整型栈
        vector<int> right(n, 0); // 初始化右端点数组,所有元素初始为0
        right[n - 1] = INT_MIN; // 将最后一个元素设置为最小整数值,作为初始值
        // 计算每个位置的右端点最大值
        for (int i = n - 2; i >= 0; --i) {
            right[i] = max(right[i + 1], a[i + 1]);
        }

        vector<int> ret; // 定义返回结果的vector
        // 遍历入栈序列,按照规则排序
        for (int i = 0; i < n; ++i) {
            if (a[i] > right[i]) { // 如果当前元素大于其右端点的最大值
                ret.push_back(a[i]); // 将当前元素加入返回结果
                int lastMax = right[i]; // 记录当前元素作为下一个比较的基准
                // 弹出所有比基准值大的栈顶元素
                while (!st.empty() && st.top() > lastMax) {
                    ret.push_back(st.top()); // 弹出并加入返回结果
                    st.pop(); // 弹出栈顶元素
                }
            } else {
                st.push(a[i]); // 如果当前元素小于或等于其右端点的最大值,则压入栈中
            }
        }
        // 弹出栈中剩余的所有元素
        while (!st.empty()) {
            ret.push_back(st.top());
            st.pop();
        }

        return ret; // 返回排序后的栈
    }
};
  1. 贪心
class Solution {
public:
    /**
     * 栈排序算法实现
     * @param a int整型vector 描述入栈顺序
     * @ @return int整型vector 排序后的栈
     */
    vector<int> solve(vector<int>& a) {
        // 定义栈和哈希表,哈希表用于记录元素是否已经入栈
        int n = a.size();
        stack<int> st;
        bool hash[50010] = {0}; // 假设元素的值不会超过50000,初始化哈希表
        int aim = n; // aim用于记录当前需要出栈的元素的索引
        vector<int> ret; // 定义返回结果的vector

        // 遍历输入的栈序列
        for (auto x : a) {
            st.push(x); // 将元素压入栈中
            hash[x] = true; // 记录该元素已经入栈

            // 更新aim值,即找到下一个未入栈的元素的索引
            while (hash[aim]) {
                aim--; // 如果当前aim位置的元素已经入栈,则aim减1
            }

            // 出栈操作
            while (st.size() && st.top() >= aim) {
                ret.push_back(st.top()); // 弹出栈顶元素,并加入结果vector
                st.pop(); // 弹出栈顶元素
            }
        }

        return ret; // 返回排序后的栈序列
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【实战】Nginx+Keepalived高可用部署,后端Tomcat

目录 一、下载Tomcat安装包 二、安装Tomcat 三、 运行测试Tomcat是否安装成功 四、开放8080端口 五、Tomcat服务脚本 一、环境说明&#xff1a; 三、安装Keepalived 3.1、主机安装配置 实战目的是为了Nginx和后端的Tomcat都可以实现高可用&#xff0c;防止单节点故障的…

5G数字化转型redcap助您“轻”装上阵

RedCap&#xff08;Reduced Capability&#xff09;技术&#xff0c;也称为NR-Light&#xff0c;是针对5G网络的一种轻量化技术规范&#xff0c;旨在为具有较低性能要求的设备提供5G连接。 RedCap技术特点 低成本 降低芯片组和设备成本&#xff1a;RedCap通过减少终端带宽、收…

Oracle 性能诊断包收费依据

Which Data Dictionary or Dynamic Performance Views Require Purchase of the Diagnostics and / or Tuning Pack? (Doc ID 2082355.1)​编辑To Bottom In this Document Goal Solution References APPLIES TO: Oracle Database - Enterprise Edition - Version 10.2.0.5 …

LabVIEW人工模拟肺控制系统开发

开发了一种创新的主被动一体式人工模拟肺模型&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现了步进电机驱动系统的精确控制和多种呼吸模式的模拟。该系统不仅能够在主动呼吸模式下精确模拟快速呼吸、平静呼吸和深度呼吸&#xff0c;还能在被动模式下通过PID控制实现…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十二)-无人机群在物流中的应用

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

Stable Diffusion 使用

目录 背景 最简单用法 进阶用法 高手用法 safetensor 一、概述 二、主要特点 背景 Stable Diffusion 开源后&#xff0c;确实比较火&#xff0c;上次介绍了下 Stable Diffusion 最简单的concept。今天继续介绍下&#xff0c;以Liblib 为例&#xff0c;介绍下如何使用参…

k8s快速部署一个网站

1&#xff09;使用Deployment控制器部署镜像&#xff1a; kubectl create deployment web-demo --imagelizhenliang/web-demo:v1 kubectl get deployment,pods[rootk8s-matser ~]# kubectl get pods NAME READY STATUS RESTARTS A…

Centos 设置静态ip地址 远程工具Putty连接访问

1.查看本机电脑端VM中centos网络适配器设置 右键--设置---网络适配器 设置保存。 选择的VM8是自己电脑网络适配器中VM使用的网络。 2.打开“编辑”——“虚拟网络编辑器” 注意&#xff1a;NAT网络模式对应的虚拟网卡是VMnet8这个&#xff01;需要管理员权限才能更改配置信…

mysql5.7版本字符集编码

默认character_set_databaselatin1 当你字段插入中文值的时候&#xff0c;会报错。 所以修改为了character_set_databaseutf8既可以。 character_set_server他的范围更大&#xff0c;属于服务器级别。

Win10工具:批量word转png图片

首先声明这个小工具是小编本人开发的&#xff0c;无任何广告&#xff0c;会员收费机制等&#xff0c;永久使用。允许公司或个人使用&#xff0c;不允许倒卖&#xff0c;否则发现后会追究法律责任&#xff0c;毕竟开发不易。工具是用python开发的。 功能非常单一&#xff0c;就…

免杀笔记 ----> 动态调用

前一段时间不是说要进行IAT表的隐藏吗&#xff0c;终于给我逮到时间来写了&#xff0c;今天就来先将最简单的一种方式 ----> 动态调用&#xff01;&#xff01;&#xff01; 1.静态查杀 这里还是说一下我们为什么要对他进行隐藏呢&#xff1f;&#xff1f;&#xff1…

跳表的简单学习

跳表&#xff08;SkipList&#xff09;学习 1. 什么是跳表&#xff1f; 基于“空间换时间”思想&#xff0c;通过给链表建立索引&#xff0c;使得链表能够实现二分查找。 跳表是可以实现二分查找的有序链表。 2. 从单链表到跳表 对于一般的单链表&#xff0c;在其中进行查…

自动驾驶可能解决的问题

首先是各种盲区&#xff0c;雷达可能检测到各种东西&#xff0c;而这些是视觉注意不到的 然后是每辆车可以互联互通&#xff0c;整体规划路线

昇思25天学习打卡营第14天 | ShuffleNet图像分类

昇思25天学习打卡营第14天 | ShuffleNet图像分类 文章目录 昇思25天学习打卡营第14天 | ShuffleNet图像分类ShuffleNetPointwise Group ConvolutionChannel ShuffleShuffleNet模块网络构建 模型训练与评估数据集训练模型评估模型预测 总结打卡 ShuffleNet ShuffleNetV1是旷世科…

基于Python+Django+MySQL的心理咨询预约系统

心理咨询预约系统 DjangoMySQL 基于PythonDjangoMySQL的心理咨询预约系统 项目主要依赖Django3.2&#xff0c;MySQL 支持随机验证码生成与登录验证 简介 基于PythonDjangoMySQL的心理咨询预约系统通过连接数据库获取数据&#xff0c;登录新增随机数字验证码验证。具体可以看…

Java二十三种设计模式-单例模式(1/23)

引言 在软件开发中&#xff0c;设计模式是一套被反复使用的、大家公认的、经过分类编目的代码设计经验的总结。单例模式作为其中一种创建型模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。本文将深入探讨单例模式的概念、实现方式、使用场景以及潜…

捷配生产总结-PCB上器件布局不好对SMTDIP的影响

在电子制造领域&#xff0c;PCB&#xff08;印刷电路板&#xff09;的设计至关重要&#xff0c;其中器件的布局更是影响着整个生产流程的效率和质量。特别是对于 SMT&#xff08;表面贴装技术&#xff09;和 DIP&#xff08;双列直插式封装&#xff09;这两种常见的组装工艺&am…

Dify中Jieba类的create()方法实现过程

本文主要介绍Dify中Jieba类的create()方法执行过程&#xff0c;重点是段&#xff08;segment&#xff09;的关键词的生成。 一.create方法流程概述 整个create方法的目的是为了处理一批文本&#xff0c;提取它们的关键词&#xff0c;并更新关键词表&#xff0c;以便于后续的关…

Redis 框架 jedis 与 lettuce 比较

【需求背景】 由于集群模式下 Spring 对 jedis 的封装&#xff0c;在使用批量方法 (mget、delete) 时会把任务都提交到仅有一个核心线程的 executor 中执行&#xff0c;在高并发场景下会造成应用内大量任务处于排队状态而得不到执行。 具体参考&#xff1a;https://juejin.cn…

CTF之easyupload

拿到题目发现是文件上传的漏洞&#xff0c;但是这个黑名单过滤的有点严格&#xff0c;无论是文件里还是文件后缀都不能出现php 那我们就用<?eval($_POST[a]);?>来进行绕过&#xff08;注意这里要加个GIF89a或者GIP87a进行欺骗&#xff09; 但是后缀依然不能绕过怎么办&…