Leetcode-042-Trapping Rain Water

这类题做过好几次了,但每次做思路都不太顺畅,主要还是想的角度有些复杂,这次我首先思考的是这里真正重要的height是那些peak(即比左右两边都高的那些值),考虑这些peak可以得到灌水后的面积。思路应该是可以的,不过要考虑的情况比较多,还要考虑边界,写起来难免疏漏,最后只过了部分数据点,于是转向Discuss区看了一眼大神的思路,醍醐灌顶。
(https://leetcode.com/problems/trapping-rain-water/discuss/17357/Sharing-my-simple-c%2B%2B-code%3A-O(n)-time-O(1)-space)

思路简单说来,就是直接考虑每一个width为1的方格可以达到多高,其高度实际上由左边最高方格和右边最高方格的高度lmax、rmax中较小者决定。若直接对每个方格计算两者,则复杂度为,对于此题来说过于复杂,所以考虑使用双指针法由两端向中间靠近,在此过程中记录并更新lmax、rmax。

代码如下:

class Solution {
public:
    int trap(vector& height) {
        int l=0,r=height.size()-1,lmax=0,rmax=0,ans=0;
        while(lheight[r])
            {
                if(height[r]

你可能感兴趣的:(Leetcode-042-Trapping Rain Water)