42. 接雨水
Posted 易小顺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了42. 接雨水相关的知识,希望对你有一定的参考价值。
算法记录
LeetCode 题目:
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
说明
一、题目
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
二、分析
- 直接看题目有点儿看不懂的感觉,其实就是需要找出整个数组为高组成的矩形里面找凹形面积和。
- 出现凹形必然是呈现一种先减后增的趋势,那我们就只需要维护单调栈,只要出现一个比当前头节点大的值,就可以认为出现凹形面积了,然后记录这个面积。
class Solution {
public int trap(int[] height) {
Stack<Integer> s = new Stack();
int ans = 0;
for(int i = 0; i < height.length; i++) {
while(!s.empty() && height[i] > height[s.peek()]) {
int val = height[s.pop()];
if(!s.empty()) ans += (i - s.peek() - 1) * (Math.min(height[i], height[s.peek()]) - val);
}
s.push(i);
}
return ans;
}
}
总结
熟悉单调栈的使用。
以上是关于42. 接雨水的主要内容,如果未能解决你的问题,请参考以下文章