标签:单调栈清除筛选

Leetcode 42 接雨水 :单调栈

LeetCode 42. 接雨水 一、题目解析 1.1 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度,计算按此排列的柱子下雨之后能接多少雨水。 输入是一个数组 heights,输出是积水总量。 1.2 示例 问题本质:对于每一段凹槽(两个较高的柱子夹着较低的柱子),接水量取决于左右两边较矮的那根柱子与槽底的差值,再乘以宽度。 二、思路分析 2.1 接水的条件 能接水的场景可以描述

Leetcode 901:单调栈

LeetCode 901. 股票价格跨度 一、题目解析 1.1 题目描述 设计一个 StockSpanner 类,每次调用 next(price) 时,返回当天股票价格的跨度。 "跨度"的定义:从今天往回数,连续有多少天的股价 ≤ 今天的价格(含今天)。 换句话说,对于每一天,找到左边第一个比它大的那天,两者之间的天数就是跨度。 1.2 示例走一遍 天数 价格 为什么是这个跨度

单调栈速查模板

识别信号:"下一个更大/更小"、"接雨水"、"最大矩形"、"区间最值贡献"。 口诀:求大用减、求小用增(栈内单调性)。栈里存索引。 弹栈瞬间三信息同时到手:被弹元素(高)、新栈顶(左边界)、当前 i(右边界)。三类题共用这骨架,区别只在结算公式。 单调栈for 遍历数组,每轮两个动作: 弹栈(while):当前元素破坏单调性时,不停弹出栈顶。弹栈时拿到三样东西: 被弹元素(stack.pop )