当前位置:网站首页>每日一题-单调栈
每日一题-单调栈
2022-08-05 05:17:00 【菜鸡程序媛】
目录
接雨水
- 时间:0728
- 题目
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
- 思路
- 本题通过单调栈的思路进行解题
- 首先,保持栈内单调递减的顺序,当出现后面的元素值超过栈顶元素的值时,就形成了一个“坑”,坑的体积就是左右两侧更矮的墙*两面墙的间距。
- 循环的结构要采用while,因为比如是20103,当计算完“103”这个坑的时候,还需要计算前面“213”这个坑,当出现更高墙的时候需要将之前的坑的面积都累加到体积中。
- 代码:
public int trap(int[] height) {
if(height == null || height.length == 0)
return 0;
Stack<Integer> stack = new Stack<>();
int sum = 0;
for(int i = 0; i < height.length; i ++){
// 注意这里是while循环
while(!stack.isEmpty() && (height[i] > height[stack.peek()])){
int k = stack.pop(); //柱子的底子
if(stack.isEmpty())
break;
int j = stack.peek(); //此时的左边界
sum += (Math.min(height[i], height[j]) - height[k]) * (i - j - 1);
}
stack.push(i);
}
return sum;
}
边栏推荐
- 基于STM32F407的WIFI通信(使用的是ESP8266模块)
- 电子产品量产工具(3)- 文字系统实现
- 六、请求处理—获取请求参数系列注解是怎样工作的?
- MaskDistill - Semantic segmentation without labeled data
- 网络信息安全运营方法论 (上)
- 【nodejs】第一章:nodejs架构
- 【ts】typescript高阶:联合类型与交叉类型
- CH32V307 LwIP移植使用
- 「实用」运维新手一定不能错过的17 个技巧
- [Pytorch study notes] 10. How to quickly create your own Dataset dataset object (inherit the Dataset class and override the corresponding method)
猜你喜欢
随机推荐
C语言—扫雷的实现
LeetCode刷题之第701题
C语言程序死循环问题解析——变量被修改
C语言入门笔记 —— 函数(1)
LeetCode刷题之第86题
Detailed explanation of BroadCast Receiver (broadcast)
七、请求处理——Map、Model类型参数处理原理
6k+ star,面向小白的深度学习代码库!一行代码实现所有Attention机制!
网络信息安全运营方法论 (上)
OSPF网络类型
LeetCode刷题之第1024题
常用 crud 的思考和设计
LeetCode刷题之第33题
网络信息安全运营方法论 (中)
【shell编程】第三章:函数
[Pytorch study notes] 9. How to evaluate the classification results of the classifier - using confusion matrix, F1-score, ROC curve, PR curve, etc. (taking Softmax binary classification as an example)
[After a 12] No record for a whole week
CH32V307 LwIP移植使用
Redis设计与实现(第一部分):数据结构与对象
八、响应处理——ReturnValueHandler匹配返回值处理器并处理返回值原理解析