牛客单调栈结构(进阶)

Problem: 单调栈结构(进阶)

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这是一个单调栈的问题。单调栈是一种特殊的栈结构,它的特点是栈中的元素保持单调性。在这个问题中,我们需要找到每个元素左边和右边第一个比它小的元素。我们可以使用一个单调递减的栈来解决这个问题。
我们从左到右遍历数组,对于每个元素,我们将其与栈顶元素进行比较。如果当前元素小于栈顶元素,那么我们就找到了栈顶元素右边第一个比它小的元素,我们可以将栈顶元素出栈,并记录下这个信息。然后我们继续将当前元素与新的栈顶元素进行比较,直到当前元素大于栈顶元素或者栈为空,然后我们将当前元素入栈。
在遍历结束后,栈中可能还会剩下一些元素,这些元素右边没有比它们小的元素,我们可以将它们出栈,并记录下这个信息。
最后,我们需要处理一下相等的情况。如果一个元素右边第一个比它小的元素和它相等,那么我们需要找到右边第一个不等于它的元素。

解题方法

我们使用一个栈和一个二维数组来解决这个问题。栈用来存储元素的索引,二维数组用来存储每个元素左边和右边第一个比它小的元素的索引。

复杂度

时间复杂度:

O ( n ) O(n) O(n),我们只需要遍历一次数组。

空间复杂度:

O ( n ) O(n) O(n),我们需要一个栈和一个二维数组来存储信息。

Code

import java.util.*;
import java.io.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));static StreamTokenizer sr = new StreamTokenizer(in);static int MAXN = 1000010;static int n, r;static int[] stack = new int[MAXN];static int[][] ans = new int[MAXN][2];static int[] arr = new int[MAXN];public static void main(String[] args) throws IOException {n = nextInt();for (int i = 0; i < n; i++) {arr[i] = nextInt();}deal();for (int i = 0; i < n; i++) {out.println(ans[i][0] + " " + ans[i][1]);}out.flush();}private static void deal() {r = 0;int cur;for (int i = 0; i < n; i++) {while (r > 0 && arr[stack[r - 1]] >= arr[i]) {cur = stack[--r];ans[cur][0] = r > 0 ? stack[r - 1] : -1;ans[cur][1] = i;}stack[r++] = i;}while (r > 0) {cur = stack[--r];ans[cur][0] = r > 0 ? stack[r - 1] : -1;ans[cur][1] = -1;}for (int i = n - 2; i >= 0; i--) {if (ans[i][1] != -1 && arr[ans[i][1]] == arr[i]) {ans[i][1] = ans[ans[i][1]][1];}}}static int nextInt() throws IOException {sr.nextToken();return (int)sr.nval;}
}

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

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

相关文章

Android studio 下的APK打包失败问题解决办法

嗨&#xff0c;各位小伙伴们&#xff0c;我是你们的好朋友咕噜铁蛋&#xff01;作为移动应用开发者&#xff0c;在使用Android Studio进行APK打包时&#xff0c;有时候可能会遇到各种问题导致打包失败&#xff0c;这给我们的开发工作带来了一定的挑战。今天&#xff0c;我将和大…

mybatis---“日志工厂”和“分页”有用知识归纳(狂神说学习总结)

1.日志工厂 Mybatis内置的日志工厂提供日志功能&#xff0c;具体的日志实现有以下几种工具&#xff1a; SLF4JApache Commons LoggingLog4j 2Log4jJDK logging 具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的&#xff08;按上文列举的顺序查找&a…

Singularity基本命令学习

Singularity是一个为科学计算和数据密集型任务设计的容器平台,它提供了一组强大的命令来帮助用户创建、管理和运行容器。以下是一些Singularity的基本命令,以及每个命令的简单实例,以帮助你入门和理解如何使用Singularity。 1. 安装Singularity 首先,你需要在你的系统上安…

欧瑞康真空泵650S干泵SV630罗茨泵WAU251-2001安装调试使用说明

欧瑞康真空泵650S干泵SV630罗茨泵WAU251-2001安装调试使用说明

mysql和sql server 中如何创建和管理用户

阅读本文之前请参阅----MySQL 数据库安装教程详解&#xff08;linux系统和windows系统&#xff09; 在MySQL和SQL Server中创建和管理用户的过程有所不同。下面分别介绍这两种数据库系统中用户管理的常见步骤。 MySQL 创建用户 在MySQL中创建用户的语法通常如下…

杰理701N可视化SDK之LED的配置和代码浅析

杰理701N可视化SDK LED的配置 LED硬件配置LED状态配置LED状态情景配置LED在SDK中相关代码 杰理可视化工具中可以配置LED的硬件配置和LED状态配置, 在可视化工具中的LED配置选项中设置 LED硬件配置 硬件配置可设置LED名, 推LED使用的IO口以及LED的点亮方式 SDK发布的标准原理…

02|Using filesort文件排序原理详解

文件排序方式 ● 单路排序&#xff1a;是一次性取出满足条件行的所有字段&#xff0c;然后在sort buffer中进行排序&#xff1b;用trace工具可以看到sort_mode信息里显示< sort_key, additional_fields >或者< sort_key, packed_additional_fields > ● 双路排序&a…

MySQL知识点总结(五)——锁

MySQL知识点总结&#xff08;五&#xff09;——锁 锁分类表锁 & 行锁如何添加表锁&#xff1f;如何添加行锁&#xff1f; 读锁 & 写锁行锁 & 间隙锁&#xff08;gap lock&#xff09;& 临键锁&#xff08;next-key lock&#xff09; 加锁机制分析可重复读隔离…

MATLAB:数组与矩阵

2.1 数组运算 数组运算时MATLAB计算的基础。由于MATLAB面向对象的特性&#xff0c;这种数值数组称为MATLAN最重要的一种内建数据类型&#xff0c;而数组运算就是定义这种数据结果的方法。 2.1.1 数组的创建和操作 在MATLAB中一般使用方括号“[]”、逗号“,”、空格和分号“;…

数据结构与算法相关题解20240225

数据结构与算法相关题解20240225 一、58. 最后一个单词的长度二、48. 旋转图像三、69. x 的平方根四、50. Pow(x, n) 一、58. 最后一个单词的长度 简单 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度…

445. 两数相加 II(Java)

目录 题目描述&#xff1a;输入&#xff1a;输出&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&am…

CSP-202209-3-防疫大数据

CSP-202209-3-防疫大数据 解题思路 一、数据结构定义 对于大模拟的题&#xff0c;合适的数据结构选择十分重要&#xff0c;正确的数据结构选择能够有效的提升解题效率 // 漫游消息结构体 struct RoamingData {int date, user, region; };vector<RoamingData> roamin…

汇编反外挂

在软件保护领域&#xff0c;尤其是游戏保护中&#xff0c;反外挂是一个重要的议题。外挂通常指的是一种第三方软件&#xff0c;它可以修改游戏数据、操作游戏内存或提供其他作弊功能&#xff0c;从而给玩家带来不公平的优势。为了打击外挂&#xff0c;游戏开发者会采取一系列措…

Mac电脑配置环境变量

1.打开配置文件bash_profile open -e .bash_profile 2.如果没有创建过.bash_profile&#xff0c;则先需要创建 touch .bash_profile 3.输入你要配置的环境变量 #Setting PATH for Android ADB Tools export ANDROID_HOME/Users/xxx/android export PATH${PATH}:${ANDROID_HOME}…

web安全学习笔记【16】——信息打点(6)

信息打点-语言框架&开发组件&FastJson&Shiro&Log4j&SpringBoot等[1] #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-C…

代码随想录算法训练营第二十四天补|● 回溯理论基础 ● 77. 组合

回溯理论基础、组合问题 回溯理论基础 回溯能解决的问题 回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案 回溯如何穷举&#xff1a; 横向遍历for循环&#xff0c;纵向遍历backtracking&#xff08;递归&#xff09;&#xff0c;一般来说&#…

pikachu靶场-RCE

介绍&#xff1a; RCE(remote command/code execute)概述 RCE漏洞&#xff0c;可以让攻击者直接向后台服务器远程注入操作系统命令或者代码&#xff0c;从而控制后台系统。 远程系统命令执行 一般出现这种漏洞&#xff0c;是因为应用系统从设计上需要给用户提供指定的远程命…

【数据结构】排序

目录 1.排序的概念及其应用 1.1排序的概念 1.2排序的应用 1.3常见的排序算法 2.常见排序算法的实现 2.1插入排序的实现 2.11基本思想 2.12直接插入排序 2.2希尔排序&#xff08;缩小增量排序&#xff09; 2.21基本思想 2.22希尔排序 2.3选择排序 2.31基本思想 2.3…

Essential C++面向过程的编程风格

Essential C 前言 前言 通过Essential C笔记的形式对C相关重点知识进行汇总&#xff0c;读者通读此系列文章就可以轻松的把该语言基础捡起来。

蓝桥杯《数字三角形》

题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右边的那个数。此外&…