栈与队列

148 阅读1分钟

42.接雨水

动态规划的思想:利用两个dp数组,记录每一个点左右两边最高的墙壁高度,那么此点可以接的雨水就是min(dp_left[i],dp_right[i]) * 1,遍历整个数组就可以得到接雨水的总和。

单调栈的思想:计算的面积是凹槽思想,即左右墙壁和mid点,一共三个点构成一个凹槽,通过这个凹槽可以计算出面积。利用一个单调栈,遍历每个点,如果该点小于栈的头部,直接入栈;如果大于栈的头部,就将栈头元素弹出记为凹槽底部mid,再判断栈是否为空,若不为空那么就构成凹槽,计算出一个面积。如果为空则不构成凹槽,直接结束逻辑,将i入栈。

单调栈的思想里不急着每次都i++,而是先判断该点的情况,如果入栈就直接i++,不入栈的话就将其处理,等处理结束之际进入下次循环通过判断入栈。