单调栈经典例题

java 复制代码
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        //单调递增栈,栈中的所有元素严格单调递增
        //比如1 6 5 4 9 8 7 10 11 56不会出现在答案里
        //因为被4给拦截住了
        //遍历到4的时候可以把56都出栈
        //89也不会出现,被7拦住了
        //遍历到7的时候可以把89出栈
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] stack = new int[100010];
        int tt = 0;
        for (int i = 0; i < n; i++) {
            int x = sc.nextInt();
            //栈顶元素>=当前遍历到的元素就得出栈,出栈的元素以后都不会出现在答案里
            while (tt != 0 && stack[tt] >= x){
                tt--;
            }
            //退出循环时的栈顶就是要输出的结果
            if (tt != 0) System.out.print(stack[tt] + " ");
            else System.out.print("-1 ");

            //最后把该数放进栈里
            stack[++tt] = x;
        }
    }
}
相关推荐
REDcker4 分钟前
C++ std::move实现原理与vector扩容移动语义
开发语言·c++·c
im_AMBER4 分钟前
Leetcode 158 数组中的第K个最大元素 | 查找和最小的 K 对数字
javascript·数据结构·算法·leetcode·
qq_12084093718 分钟前
Three.js 场景性能优化实战:首屏、帧率与内存的工程化治理
开发语言·javascript·性能优化·three.js
脱氧核糖核酸__8 分钟前
LeetCode热题100——48.旋转图像(题解+答案+要点)
c++·算法·leetcode
四斤年华10 分钟前
关于SpringBoot在MultipartFile上java.nio.file.NoSuchFileException: /tmp/undertow
java·spring boot·nio
木井巳11 分钟前
【递归算法】字母大小写全排列
java·算法·leetcode·决策树·深度优先
宵时待雨12 分钟前
优选算法专题2:滑动窗口
数据结构·c++·笔记·算法
Mr_pyx13 分钟前
LeetCode HOT 100 —— 矩阵置零(多种解法详解)
算法·leetcode·矩阵
葫三生14 分钟前
《论三生原理》系列:文化自信、知识范式重构与科技自主创新的思想运动源头?
大数据·人工智能·科技·深度学习·算法·重构·transformer