任务日期:7.24
题目一链接:42. 接雨水 - 力扣(LeetCode)
思路:本题利用单调栈寻找任一一个元素右侧第一个比他大的元素的位置,而左侧我们用当前元素左侧的那个元素,从而形成一个凹槽(根据单调栈的性质,一定是一个凹槽,只不过宽度可能不是1),然后利用公式求出结果。
代码:
class Solution {
public:
//从左到右遍历数组下标
//本题公式:h = (min(左侧柱子高度,右侧柱子高度) - mid) * w(右侧最高度和左侧最高度所对应的下标差值),然后多个h相加即得结果
int trap(vector<int>& height) {
stack<int> st;
st.push(0);
int res = 0;
for(int i = 1;i < height.size();i ++) {
if(height[i] < height[st.top()]) {
st.push(i);
}
else if(height[i] == height[st.top()]) {
st.pop();
st.push