leetcode日记(32)接雨水

这道题我一开始的思路是从左往右找寻能装水的"水坑"(也就是找先降低后升高的地方),然后再将水坑容量全部加起来,后来想想不行,因为可能中间有隔了一个坑位的两个较高柱子,这样做的话会少算两个柱子中间的水。

后来我想到了新思路,因为之前做过类似的盛水题,是分别使用两个指针指向两端,向中间偏移,我想到这题似乎也可以这样,每次遇到高的柱子就以它为基准计算后面的盛水量,这样依次寻找出来的水坑就不会少算。

cpp 复制代码
class Solution {
public:
    int trap(vector<int>& height) {
        int sum=0;
        if(height.size()<3) return sum;
        int x=0;
        int y=height.size()-1;
        int hei=min(height[x],height[y]);
        sum+=hei*(height.size()-2);
        while(x<y-1){
            if(height[x]>height[y]){
                if(height[y-1]<=hei){y--;sum-=height[y];}
                else{
                    y--;
                    sum-=hei;
                    sum-=(y-x-1)*hei;
                    hei=min(height[x],height[y]);
                    sum+=hei*(y-x-1);
                }
            }
            else{
                if(height[x+1]<=hei){x++;sum-=height[x];}
                else{
                    x++;
                    sum-=hei;
                    sum-=(y-x-1)*hei;
                    hei=min(height[x],height[y]);
                    sum+=hei*(y-x-1);
                }
            }
        }
        return sum;
    }
};
相关推荐
listhi5203 分钟前
两台三相逆变器并联功率分配控制MATLAB实现
算法
Evand J6 分钟前
【IMM】非线性目标跟踪算法与MATLAB实现:基于粒子滤波的交互式多模型,结合CV和CT双模型对三维空间中的机动目标进行高精度跟踪
算法·matlab·目标跟踪·pf·粒子滤波·imm·多模型
重生之后端学习8 分钟前
64. 最小路径和
数据结构·算法·leetcode·排序算法·深度优先·图论
We་ct31 分钟前
LeetCode 212. 单词搜索 II:Trie+DFS 高效解法
开发语言·算法·leetcode·typescript·深度优先·图搜索算法·图搜索
样例过了就是过了33 分钟前
LeetCode热题100 路径总和 III
数据结构·c++·算法·leetcode·链表
lxh011334 分钟前
函数防抖题解
前端·javascript·算法
再难也得平39 分钟前
力扣41. 缺失的第一个正数(Java解法)
数据结构·算法·leetcode
颜酱39 分钟前
环检测与拓扑排序:BFS/DFS双实现
javascript·后端·算法
IronMurphy1 小时前
【算法二十】 114. 寻找两个正序数组的中位数 153. 寻找旋转排序数组中的最小值
java·算法·leetcode
默默学前端1 小时前
HTML 高频面试题 5 道|吃透基础,面试不慌(附详细解析)
前端·面试·职场和发展·html5