算法刷题笔记 单调栈(C++实现)

文章目录

    • 题目描述
    • 基本思路
    • 实现代码

题目描述

  • 给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出−1

输入格式

  • 第一行包含整数N,表示数列长度。
  • 第二行包含N个整数,表示整数数列。

输出格式

  • 共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出−1

数据范围

  • 1 ≤ N ≤ 10^5
  • 1 ≤ 数列中元素 ≤ 109

基本思路

  • 本题是单调栈最经典的应用情况。单调栈是指一个其中的元素是按照顺序排列的栈。
  • 基本思路为:
    • 首先构建一个空的整数类型的栈;
    • 每次读取一个数组元素,进行判定:
      • 如果此时的栈为空,则直接输出-1,然后将该元素入栈;
      • 如果此时的栈不为空,则将当前数组元素与栈顶元素比较。如果当前元素小于等于栈顶元素,则将栈顶元素出栈,然后比较当前元素和更新后的栈顶元素。重复上述过程,如果最终找到了一个比当前数组元素小的栈顶元素,则输出该栈顶元素的值;如果没有找到比当前数组小的栈顶元素(即把栈中的所有元素都出栈了,仍然没有找到),则直接输出-1 。最后,将当前的数组元素入栈。
    • 重复上述过程直到所有数组元素均输入完成。

实现代码

#include <cstdio>
#include <stack>
using namespace std;int main(void)
{int N;scanf("%d", &N);stack<int> sorted_stack;for(int i = 0; i < N; ++ i){int x;scanf("%d", &x);if(sorted_stack.empty()) printf("-1 ");else{while(!sorted_stack.empty() && sorted_stack.top() >= x) sorted_stack.pop();if(sorted_stack.empty()) printf("-1 ");else printf("%d ", sorted_stack.top());}sorted_stack.push(x);}return 0;
}

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

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

相关文章

学会python——用python制作一个登录和注册窗口(python实例十八)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.登录和注册窗口 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读…

Spring Boot项目中使用MockMvc进行测试的详细指南

目录 MockMvc简介安装和配置基本用法高级用法集成测试测试最佳实践总结 MockMvc简介 MockMvc是Spring框架提供的一种用于测试Spring MVC控制器的工具。它允许开发者在不启动完整的Web服务器的情况下&#xff0c;模拟HTTP请求并验证响应。MockMvc的主要优点包括&#xff1a; …

免杀笔记 ---> PE

本来是想先把Shellcode Loader给更新了的&#xff0c;但是涉及到一些PE相关的知识&#xff0c;所以就先把PE给更了&#xff0c;后面再把Shellcode Loader 给补上。 声明&#xff1a;本文章内容来自于B站小甲鱼 1.PE的结构 首先我们要讲一个PE文件&#xff0c;就得知道它的结构…

SPI四种模式--极性与相位

SPI的四种模式&#xff1a;相位和极性 极性 定义时钟空闲状态&#xff1a; CPOL0&#xff1a;时钟线在空闲状态为低电平 CPOL1&#xff1a;时钟线在空闲状态为高电平 这个设置决定了设备不进行通信时时钟线的状态。 兼容性&#xff1a; 不同的SPI设备可能需要不同的时钟极性…

java.lang.classnotfoundexception jakarta.xml.bind.jaxbexception java 17问题

解决 <dependency><groupId>jakarta.xml.bind</groupId><artifactId>jakarta.xml.bind-api</artifactId><version>4.0.2</version> </dependency>参考&#xff1a; Handling NoClassDefFoundError for JAXBException in Jav…

【Linux开发实战指南】基于TCP、进程数据结构与SQL数据库:构建在线云词典系统(含注册、登录、查询、历史记录管理功能及源码分享)

目录 项目演示&#xff1a; 1. 主界面 技术讲解&#xff1a; TCP连接 进程的并发 链表 SQLite3 IO对文件的读写 功能实现 实现逻辑 我遇到的问题&#xff1a; 服务器端代码思路解析 必要条件 步骤详解 客户端代码思路解析 步骤详解 服务器源码如下&#xff1a;…

windows电脑如何运行python的定时任务

这里需要使用&#xff1a;windows系统设置-控制面板里的计划任务 1.打开计划任务之后&#xff0c;选择&#xff1a;创建基本任务 2.填写名称&#xff0c;这里根据自己具体的项目需求填写&#xff0c;然后点击下一步。 3.选择每日&#xff0c;再点击下一步 4.设置时间&…

Python 学习之常用第三方库(五)

Python 常用第三方库 Python 是一门功能强大的编程语言&#xff0c;其生态系统中包含了许多优秀的第三方库&#xff0c;这些库极大地扩展了 Python 的功能。以下是一些常用的 Python 第三方库&#xff1a; 1. NumPy&#xff1a; a. 用于数值计算的库&#xff0c;提供了大量的…

科普文:linux I/O原理、监控、和调优思路

Linux 文件系统 磁盘和文件系统的关系&#xff1a; 磁盘为系统提供了最基本的持久化存储。 文件系统则在磁盘的基础上&#xff0c;提供了一个用来管理文件的树状结构。 文件系统工作原理 索引节点和目录项 文件系统&#xff0c;本身是对存储设备上的文件&#xff0c;进行…

多维度多场景文档门户,鸿翼ECM文档云打造文档管理新范式

​在现代企业运营中&#xff0c;内容协作的效率直接影响到组织的整体表现和竞争力。传统的文档管理系统都是通过目录结构的方式进行文件管理&#xff0c;在实际业务中无法满足用户多视角、多维度、多场景的文档业务需求。因此&#xff0c;搭建结合文档体系的业务门户是许多企业…

策略模式入门:基本概念与应用

目录 策略模式策略模式结构策略模式应用场景策略模式优缺点练手题目题目描述输入描述输出描述题解 策略模式 策略模式&#xff0c;又称政策模式&#xff0c;是一种行为型设计模式&#xff0c;它能让你定义一系列算法&#xff0c;并将每种算法分别放入独立的类中&#xff0c;以…

数字研发·驱动变革 | 2024达索系统装备行业数字化研发专题研讨会成功举办

2024年6月28日&#xff0c;由百世慧举办的“数字研发驱动变革|2024达索系统装备行业数字化研发专题研讨会”在达索系统&#xff08;重庆&#xff09;智能制造创新中心成功举办。 随着全球制造业向着智能化、数字化转型&#xff0c;我国工业装备行业也面临着转型升级的压力和机遇…

Gym cuda error: invalid resource handle

gym模拟的时候&#xff0c; 出现问题&#xff1a; sim和gym的定义如下&#xff1a; from isaacgym import gymapi,gymtorch import math,random# 1. Simulation Setup gym gymapi.acquire_gym()# get default set of parameters sim_params gymapi.SimParams() sim_params.u…

网关,路由器,交换机

一、网关 (Gateway) 是一种设备&#xff0c;用于连接不同网络&#xff0c;能够转发数据包并翻译协议&#xff0c;允许不同类型的网络通信。网关通常工作在OSI模型的应用层或传输层&#xff0c;提供连接和路由服务。 应用场景例子&#xff1a; 在企业网络中&#xff0c;网关可…

四倍体和六倍体小麦抗赤霉病的比较研究

核心总结&#xff1a;四倍体和六倍体小麦抗赤霉病的比较研究 研究背景 小麦赤霉病&#xff08;Fusarium head blight, FHB&#xff09;由Fusarium graminearum引起&#xff0c;是全球范围内对小麦生产造成严重威胁的疾病。FHB感染不仅会显著降低粮食产量和质量&#xff0c;还…

2024年能在一个月内录用的EI检索会议CCPQT 2024

第三届计算、通信、感知与量子技术国际会议&#xff08;CCPQT 2024&#xff09;将于2024 年10月25日-10月27日在中国珠海召开。&#xff08;往届均已顺利见刊检索&#xff09; 会议信息 大会官网&#xff1a;http://www.ccpqt.org/ 会议地点&#xff1a;中国珠海 会议时间&…

企业多存储方式如何兼顾安全统一管理、便捷流畅访问的双向需求?

数据和文件存储是企业最基础的需求&#xff0c;常见的存储方式有磁盘存储、NAS存储、SAN存储、云存储、分布式存储、闪存存储等&#xff1b;随着企业规模的扩大、业务结构的复杂化&#xff0c;企业内部可能会同时出现多种存储方式、多个存储设备并行使用的情况。 这样的使用场景…

python之音频处理(1)语速快慢的改变

方案1&#xff1a;使用pydub 处理 from pydub import AudioSegment sound AudioSegment.from_file(r"D:\websiteDownload\我今天被一件事情搞得很烦.wav") print(sound.duration_seconds) rate 0.75 sound_with_altered_frame_rate sound._spawn(sound.raw_data,…

【启明智显技术分享】Model3C芯片电阻屏RTP配置、调试与测试指南

一、背景 本指南将详细介绍启明智显的Model3C芯片电阻屏RTP配置、调试与测试指南。无论您是电子爱好者、开发者还是工程师&#xff0c;这份指南都能助您快速上手并充分利用这款触摸屏的各项功能。 二、芯片介绍 Model3C是一款基于RISC-V的高性能、国产自主、工业级高清显示与…

java通过jts获取点在线段中的位置

在Java中&#xff0c;可以使用JTS&#xff08;Java Topology Suite&#xff09;库来获取点在线段的垂足点位置。以下是一个简单的示例代码&#xff0c;展示了如何使用JTS获取点到线段的垂足点位置&#xff1a; 首先&#xff0c;确保你的项目中包含了JTS库。 import org.locati…